The easiest setup is if you have web2py/ and web2py/applications/ under it. It really does not matter if it is called web2py or not but it matters that web2py.py and gaehandler.py and gluon/ are at the same level as applications.
You can put your applications in a different folder but this requires changing default parameters in examples/options_std.py. I would not recommend that to a new user. Massimo On Monday, 7 December 2015 19:38:15 UTC-6, Brad Cardello wrote: > > Ah, thank you for the advice on removing main.py. And my folder structure > is similar to that, with one change. I don't quite remember if this is > something I did manually per my instructor's advice, but instead of > web2py/, my folder is called web2py-class. I do have a folder called web2py > located elsewhere on my computer, though. Should I move my application from > web2py-class/applications/ to web2py/applications? Thank you so much. > > On Monday, December 7, 2015 at 6:57:31 AM UTC-8, Massimo Di Pierro wrote: >> >> You should not need that main.py in web2py. web2py does not uses webapp2. >> You only need app.py and gaehandler.py They look correct. The error is from >> this lines in gaehandler: >> >> >> if not os.path.isdir('applications'): >> raise RuntimeError('Running from the wrong folder') >> >> >> Do you have the correct folder structure? >> >> web2py/ >> app.yaml >> gaehandler.py >> web2py.py >> applications/... >> gluon/... >> [etc etc] >> >> >> On Monday, 7 December 2015 06:40:49 UTC-6, Brad Cardello wrote: >>> >>> Hey everyone, I'm still fairly new to web2py, and completely new to >>> deploying my website (developed using PyCharm, if that matters). So, here's >>> the error I'm getting in the logs whenever I try to access my website: >>> >>> Traceback (most recent call last): >>>> >>>> File "C:\Program Files >>>> (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 240, >>>> in Handle >>>> >>>> handler = _config_handle.add_wsgi_middleware(self._LoadHandler()) >>>> >>>> File "C:\Program Files >>>> (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 299, >>>> in _LoadHandler >>>> >>>> handler, path, err = LoadObject(self._handler) >>>> >>>> File "C:\Program Files >>>> (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 85, >>>> in LoadObject >>>> >>>> obj = __import__(path[0]) >>>> >>>> File "C:\Users\Brad Cardello\Desktop\Computer >>>> Science\CMPS-183\web2py-class\applications\WebUcscTutor\gaehandler.py", >>>> line 40, in <module> >>>> >>>> raise RuntimeError('Running from the wrong folder') >>>> >>>> RuntimeError: Running from the wrong folder >>>> >>>> INFO 2015-12-07 01:10:16,092 module.py:787] default: "GET / >>>> HTTP/1.1" 500 - >>> >>> >>> >>> I'm really not sure why this is happening, as it gives me this error no >>> matter where gaehandler.py is located in my file system. At the moment, per >>> multiple people's instructions, my app.yaml, gaehandler.py, and main.py are >>> all in the root directory for my project >>> (/web2py-class/applications/WebUcscTutor). I've tried moving it to >>> web2py-class/applications, and web2py-class, but nothing seems to change >>> this error. >>> >>> Here's my *app.yaml* >>> >>> # For Google App Engine deployment, copy this file to app.yaml >>> # and edit as required >>> # See http://code.google.com/appengine/docs/python/config/appconfig.html >>> # and http://web2py.com/book/default/chapter/11?search=app.yaml >>> >>> application: ucsc-tutor-website >>> version: 1 >>> api_version: 1 >>> >>> # use these lines for Python 2.7 >>> # upload app with: appcfg.py update web2py (where 'web2py' is web2py's root >>> directory) >>> # >>> runtime: python27 >>> threadsafe: true # true for WSGI & concurrent requests (Python 2.7 only) >>> >>> default_expiration: "1m" # for static files >>> >>> handlers: >>> >>> # Warning! Static mapping - below - isn't compatible with >>> # the parametric router's language logic. >>> # You cannot use them together. >>> >>> - url: /(.+?)/static/_(\d+\.\d+\.\d+)\/(.+) >>> static_files: applications/\1/static/\3 >>> upload: applications/(.+?)/static/(.+) >>> secure: optional >>> expiration: "365d" >>> >>> - url: /(.+?)/static/(.+) >>> static_files: applications/\1/static/\2 >>> upload: applications/(.+?)/static/(.+) >>> secure: optional >>> >>> - url: /favicon.ico >>> static_files: applications/welcome/static/favicon.ico >>> upload: applications/welcome/static/favicon.ico >>> >>> - url: /robots.txt >>> static_files: applications/welcome/static/robots.txt >>> upload: applications/welcome/static/robots.txt >>> >>> - url: .* >>> script: gaehandler.wsgiapp # WSGI (Python 2.7 only) >>> secure: optional >>> >>> admin_console: >>> pages: >>> - name: Appstats >>> url: /_ah/stats >>> >>> skip_files: | >>> ^(.*/)?( >>> (app\.yaml)| >>> (app\.yml)| >>> (index\.yaml)| >>> (index\.yml)| >>> (#.*#)| >>> (.*~)| >>> (.*\.py[co])| >>> (.*/RCS/.*)| >>> (\..*)| >>> (applications/examples/.*)| >>> ((examples|welcome)\.(w2p|tar))| >>> (applications/.*?/(cron|databases|errors|cache|sessions)/.*)| >>> ((logs|scripts)/.*)| >>> (anyserver\.py)| >>> (web2py\.py)| >>> ((cgi|fcgi|modpython|wsgi)handler\.py)| >>> (epydoc\.(conf|css))| >>> (httpserver\.log)| >>> (logging\.example\.conf)| >>> (route[rs]\.example\.py)| >>> (setup_(app|exe)\.py)| >>> (splashlogo\.gif)| >>> (parameters_\d+\.py)| >>> (options_std.py)| >>> (gluon/tests/.*)| >>> (gluon/rocket\.py)| >>> (contrib/(gateways|markdown|memcache|pymysql)/.*)| >>> (contrib/(populate|taskbar_widget)\.py)| >>> (google_appengine/.*)| >>> (.*\.(bak|orig))| >>> )$ >>> >>> builtins: >>> - remote_api: on >>> - appstats: on >>> - admin_redirect: on >>> - deferred: on >>> >>> >>> >>> Here's my *gaehandler.py*: >>> >>> #!/usr/bin/env python >>> # -*- coding: utf-8 -*- >>> >>> """ >>> This file is part of the web2py Web Framework >>> Copyrighted by Massimo Di Pierro <mdip...@cs.depaul.edu> >>> License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) >>> """ >>> >>> ############################################################################## >>> # Configuration parameters for Google App Engine >>> ############################################################################## >>> LOG_STATS = False # web2py level log statistics >>> APPSTATS = True # GAE level usage statistics and profiling >>> DEBUG = False # debug mode >>> # >>> # Read more about APPSTATS here >>> # >>> http://googleappengine.blogspot.com/2010/03/easy-performance-profiling-with.html >>> # can be accessed from: >>> # http://localhost:8080/_ah/stats >>> ############################################################################## >>> # All tricks in this file developed by Robin Bhattacharyya >>> ############################################################################## >>> >>> >>> import time >>> import os >>> import sys >>> import logging >>> import cPickle >>> import pickle >>> import wsgiref.handlers >>> import datetime >>> >>> path = os.path.dirname(os.path.abspath(__file__)) >>> >>> # os.chdir(path) ? >>> >>> if not os.path.isdir('applications'): >>> raise RuntimeError('Running from the wrong folder') >>> >>> sys.path = [path] + [p for p in sys.path if not p == path] >>> >>> sys.modules['cPickle'] = sys.modules['pickle'] >>> >>> >>> from gluon.settings import global_settings >>> from google.appengine.ext import webapp >>> from google.appengine.ext.webapp.util import run_wsgi_app >>> >>> >>> global_settings.web2py_runtime_gae = True >>> global_settings.db_sessions = True >>> if os.environ.get('SERVER_SOFTWARE', '').startswith('Devel'): >>> (global_settings.web2py_runtime, DEBUG) = \ >>> ('gae:development', True) >>> else: >>> (global_settings.web2py_runtime, DEBUG) = \ >>> ('gae:production', False) >>> >>> >>> import gluon.main >>> >>> >>> def log_stats(fun): >>> """Function that will act as a decorator to make logging""" >>> def newfun(env, res): >>> """Log the execution time of the passed function""" >>> timer = lambda t: (t.time(), t.clock()) >>> (t0, c0) = timer(time) >>> executed_function = fun(env, res) >>> (t1, c1) = timer(time) >>> log_info = """**** Request: %.2fms/%.2fms (real time/cpu time)""" >>> log_info = log_info % ((t1 - t0) * 1000, (c1 - c0) * 1000) >>> logging.info(log_info) >>> return executed_function >>> return newfun >>> >>> >>> logging.basicConfig(level=logging.INFO) >>> >>> >>> def wsgiapp(env, res): >>> """Return the wsgiapp""" >>> env['PATH_INFO'] = env['PATH_INFO'].decode('latin1').encode('utf8') >>> >>> #when using the blobstore image uploader GAE dev SDK passes these as >>> unicode >>> # they should be regular strings as they are parts of URLs >>> env['wsgi.url_scheme'] = str(env['wsgi.url_scheme']) >>> env['QUERY_STRING'] = str(env['QUERY_STRING']) >>> env['SERVER_NAME'] = str(env['SERVER_NAME']) >>> >>> #this deals with a problem where GAE development server seems to forget >>> # the path between requests >>> if global_settings.web2py_runtime == 'gae:development': >>> gluon.admin.create_missing_folders() >>> >>> web2py_path = global_settings.applications_parent # backward >>> compatibility >>> >>> return gluon.main.wsgibase(env, res) >>> >>> >>> if LOG_STATS or DEBUG: >>> wsgiapp = log_stats(wsgiapp) >>> >>> >>> def main(): >>> """Run the wsgi app""" >>> run_wsgi_app(wsgiapp) >>> >>> if __name__ == '__main__': >>> main() >>> >>> >>> >>> >>> And here's *main.py* (generated by PyCharm): >>> >>> #!/usr/bin/env python >>> # >>> # Copyright 2007 Google Inc. >>> # >>> # Licensed under the Apache License, Version 2.0 (the "License"); >>> # you may not use this file except in compliance with the License. >>> # You may obtain a copy of the License at >>> # >>> # http://www.apache.org/licenses/LICENSE-2.0 >>> # >>> # Unless required by applicable law or agreed to in writing, software >>> # distributed under the License is distributed on an "AS IS" BASIS, >>> # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. >>> # See the License for the specific language governing permissions and >>> # limitations under the License. >>> # >>> import webapp2 >>> >>> class MainHandler(webapp2.RequestHandler): >>> def get(self): >>> self.response.write('Hello world!') >>> >>> app = webapp2.WSGIApplication([ >>> ('/', MainHandler) >>> ], debug=True) >>> >>> >>> >>> Any help would be greatly appreciated! I need this deployed by Wednesday >>> (12/9) >>> >> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.