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 <mdipie...@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.