from the point of view of GAE, web2py is one app so all the applications/* will be deployed and share the same datastore which is a nightmare. This is why in app.yaml you should make sure only one of the application is deployed. You can have multiple app.yaml to deploy multiple folders.
On Tuesday, 8 December 2015 03:15:55 UTC-6, Brad Cardello wrote: > > 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.