Thank you very much for both of your help. I got it to work by adding a routes.py file to my web2py folder, and forcing it to open up to the correct app.
One last question, how would I go about deploying multiple apps from the same applications/ folder? Would I need multiple app.yaml, etc. files? Excuse my complete noobiness, but I'm glad to be learning it! On Dec 8, 2015 12:54 AM, "Ramkrishan Bhatt" <ramkrishan.bh...@gmail.com> wrote: > You need to select complete web2py folder. Also you need to remove Admin > app from applications. There is one routes.py where you can configure your > default application to be called. > > > On Tuesday, 8 December 2015 13:55:22 UTC+5:30, Brad Cardello wrote: >> >> Alright, so I changed the name from web2py-class to web2py, and I moved >> app.yaml and gaehandler.py to the same level as applications and gluon/ but >> Google App Engine Launcher refuses to run it, saying that it could not find >> app.yaml in the specific application I want it to run. I'm selecting my >> actual app (i.e.: web2py/applications/myappname), should I just be >> selecting web2py or web2py/applications? Thank you again for the assistance. >> >> On Mon, Dec 7, 2015 at 9:00 PM, Massimo Di Pierro <massimo....@gmail.com> >> wrote: >> >>> 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 a topic in the >>> Google Groups "web2py-users" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/web2py/tcjBN0qZQ7k/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> web2py+un...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > 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 a topic in the > Google Groups "web2py-users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/web2py/tcjBN0qZQ7k/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > web2py+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- 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.