Project

General

Profile

ModjyGoogleAppEngine » History » Revision 8

Revision 7 (Alan Kennedy, 2009-04-24 06:01 PM) → Revision 8/9 (Alan Kennedy, 2009-06-09 02:49 PM)

h1. Running jython WSGI applications on Google AppEngine, with modjy. 

 Now that "Google has added Java/JVM support to their AppEngine":http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html , it is now possible to run other JVM languages on it as well, including our favourite language "Jython":http://www.jython.org . 

 Modjy is the jython WSGI -> servlets gateway, used to bridge jython WSGI applications to running inside java servlet containers. And Google AppEngine is arguably one of the largest-scale servlet containers there is. And modjy can run applications on AppEngine. In order to do so, follow these steps. the following steps must be followed. "We contributed modjy to jython a few months back":http://jython.xhaus.com/?p=41 . 

 Follow this link to see the "modjy demo application running on Google AppEngine":http://jywsgi.appspot.com 

 h2. Get a jython.jar suitable for running on AppEngine. 

 Ever since Because of the "patches provided by google security constraints associated with running inside the AppEngine, e.g. not being allowed to make jython run on write files, Google Appengine":http://bugs.jython.org/issue1188 were applied have provided "patches to jython 2.5 at "revision 6252":http://fisheye3.atlassian.com/changelog/jython/?cs=6252 , the jython.jar supplied with the jython 2.5 distribution should run unmodified on Google Appengine. project":http://google-appengine-java.googlegroups.com/web/jython-r5996-appengine.patch to handle these concerns. 

 So you should use the They also provided a pre-built jython.jar file, built with these patches applied, available from the "latest version here: "Google's build of jython":http://www.jython.org/ , which at jython for AppEngine":http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine . But it doesn't work! (Seems that the time of writing is Release Candidate 4, which will probably become jar was incompletely built, and excluded the final *jar-complete* ant task in the jython 2.5.0 release. build.xml file. 

 But worry not! We've built a fresh build of jython, from "trunk@revision 6218":http://fisheye3.atlassian.com/browse/jython/trunk , with the google patches applied, that works ( we checked!). You can download it from here: "jython.jar built for AppEngine":http://downloads.xhaus.com/jython_google_appengine/ . 

 h2. Making the jython library accessible. 

 A The next limitation of Google's AppEngine is that you can only upload a limit of 1,000 files for any given web application. A lot of the code for modjy resides in the *Lib/modjy* directory of the jython distribution. The *Lib* directory is pretty big, and so exceeds the file limit. 

 The easiest way to get around this is to upload the Library in a zip file. Simply make a zip file of the contents of the *Lib* directory *within the directory itself*, i.e. the paths inside the zip file *should not start with *Lib/*. (You can download such a zip file below if you're concerned about getting it wrong). 

 Lastly, you have to add a *.pth* file which refers to your newly created *lib.zip*. It doesn't matter what that file is called, as long as it ends in *.pth*. So make a simple one line text file called *all.pth*, and put the text "lib.zip" on that one line. 

 Place both the *all.pth* and the *lib.zip* file in the *WEB-INF/lib-python* directory of your web application, and you're good to go! 

 h2. Appengine application descriptor 

 When uploading applications to AppEngine, you also need to provide an "Application Descriptor":http://code.google.com/appengine/docs/java/config/appconfig.html , stored in a file called *appengine-web.xml*. The file must reside in the web archive directory, inside *WEB-INF*, i.e. at the same level as the standard servlet *web.xml* file.  

 Here is the file that we use for the modjy demo application. 

 <pre> 
 <?xml version="1.0" encoding="utf-8"?> 
 <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
   <application>jywsgi</application> 
   <version>5</version> 
 </appengine-web-app> 
 </pre> 

 h2. Downloading the complete finished product. 

 We have provided If you don't want to go through all of the steps of building stuff yourself, and going through a trial-and-error process, you can download a complete version of the "modjy demo application webapp for Google AppEngine":http://downloads.xhaus.com/modjy_webapp_google_appengine/ for you to download. (This version is derived from jython 2.5RC4) 

 .  

 Don't forget that you have to get a copy of the latest jython.jar a "jython.jar for Google AppEngine":http://downloads.xhaus.com/jython_google_appengine/ and place it into the *WEB-INF/lib* directory. 

 You will also have to place the AppEngine runtime api jar file in the *WEB-INF/lib* directory as well. It is located in the *lib/user* directory of the "AppEngine SDK download":http://code.google.com/appengine/downloads.html . 

 h2. Deploying to Google AppEngine. 

 To deploy the application, issue the following command 

 <pre> 
 $APP_ENGINE_SDK_HOME/bin/appcfg update upload modjy_webapp 
 </pre> 

 And you should be up and running.