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.

Reply via email to