I would like to share some of my progress on running CherryPy on IronPython. Yes it starts up. No it doesn't process any request.
Following are steps to reproduce this result. I would be very interested to here about your experience. 1. Install Mono 1.1.13.x versions won't work. This usually means you can't use Mono packaged by your distribution. For this howto I am using the Linux binary installer for x86, Mono 1.1.15_1, and I recommend you to use it too. It should work on any Linux distributions, and does not require root privilege to install, and uninstalls cleanly. If your platform is not x86, you should compile from the source. Of course if you are on Windows, you just need .NET 2.0 runtime, and you can skip this step. 2. Download IronPython and CherryPy I assume you know how to do these. I used IronPython 1.0 Beta 6 and CherryPy 2.2.1. 3. Extract archive >From now on I assume Unix-y command line. If you are on Windows perform equivalent steps on that platform. $ unzip IronPython-1.0-Beta6.zip $ tar zxf CherryPy-2.2.1.tar.gz 4. Copy CPython libraries This assumes you have CPython 2.4 installed on your system. I am using Debian GNU/Linux package python2.4 version 2.4.3-3. $ cd IronPython-1.0-Beta6 $ rm -rf Lib $ cp -a /usr/lib/python2.4 Lib 5. Download my socket libraries IronPython doesn't include built-in socket module yet, so I wrote one myself. Download it and replace CPython's socket.py with it. $ cd Lib $ rm socket.py $ wget http://sparcs.kaist.ac.kr/~tinuviel/fepy/lib/socket.py $ wget http://sparcs.kaist.ac.kr/~tinuviel/fepy/lib/ssl.py Let's move up. $ cd .. $ cd .. 6. Download my patches patch-lib patches CPython standard library to workaround Mono bugs. You don't need it if you are using MS.NET. Details: IronPython uses .NET 2.0 GetEncodings() method to process Python source file encoding declaration. This method is not implemented in Mono. inspect.py, used indirectly by CherryPy, includes source file encoding declaration. $ wget http://sparcs.kaist.ac.kr/~tinuviel/fepy/ironcherry/patch-lib patch-cherrypy patches CherryPy to workaround IronPython bugs, and in one case, CPython dependency. Hopefully parts due to IronPython bugs won't be needed in the future. Details: IronPython currently lacks datetime.datetime class, so _cputil.py patch rewrites timestamping code with time.strftime. For various reasons sessionfilter won't work yet, so delete the code from __init__.py and comment out the code from filters/__init__.py. IronPython doesn't have zlib built-in module yet, so disable gzipfilter. lib/cptools.py implements "safe eval" to read the config file using the compiler package, which depends on CPython's internal parser module, which I don't think IronPython can reasonably implement. I replaced this with eval(). Finally, _cpengine.py is patched to workaround IronPython's comparison bug. More on this bug here: http://lists.ironpython.com/pipermail/users-ironpython.com/2006-May/002248.html $ wget http://sparcs.kaist.ac.kr/~tinuviel/fepy/ironcherry/patch-cherrypy 7. Apply patches $ cd IronPython-1.0-Beta6 $ patch -p0 < ../patch-lib $ cd .. $ cd CherryPy-2.2.1 $ patch -p0 < ../patch-cherrypy $ cd .. 8. Download sample CherryPy application and configuration test.py is just the simplest possible CherryPy application imaginable. test.conf turns off autoreloading, because it uses os.spawnve which is not yet implemented in IronPython. $ cd CherryPy-2.2.1 $ wget http://sparcs.kaist.ac.kr/~tinuviel/fepy/ironcherry/test.py $ wget http://sparcs.kaist.ac.kr/~tinuviel/fepy/ironcherry/test.conf 9. Run $ mono ../IronPython-1.0-Beta6/IronPythonConsole.exe test.py 05/May/2006:2:10:16 CONFIG INFO Server parameters: 05/May/2006:2:10:16 CONFIG INFO server.environment: development 05/May/2006:2:10:16 CONFIG INFO server.log_to_screen: True 05/May/2006:2:10:16 CONFIG INFO server.log_file: 05/May/2006:2:10:16 CONFIG INFO server.log_tracebacks: True 05/May/2006:2:10:17 CONFIG INFO server.log_request_headers: True 05/May/2006:2:10:17 CONFIG INFO server.protocol_version: HTTP/1.0 05/May/2006:2:10:17 CONFIG INFO server.socket_host: 05/May/2006:2:10:17 CONFIG INFO server.socket_port: 8080 05/May/2006:2:10:17 CONFIG INFO server.socket_file: 05/May/2006:2:10:17 CONFIG INFO server.reverse_dns: False 05/May/2006:2:10:17 CONFIG INFO server.socket_queue_size: 5 05/May/2006:2:10:17 CONFIG INFO server.thread_pool: 10 05/May/2006:2:10:19 HTTP INFO Serving HTTP on http://localhost:8080/ Nice. Now access the site from the web browser, and you get... 05/May/2006:2:11:09 HTTP INFO Request Headers: Content-Type: Remote-Host: 127.0.0.1 KEEP-ALIVE: 300 ACCEPT-LANGUAGE: ko,en;q=0.5 USER-AGENT: Mozilla/5.0 (X11; U; Linux i686; ko-KR; rv:1.8.0.3) Gecko/20060326 Firefox/1.5.0.3 (Debian-1.5.dfsg+1.5.0.3-1) Remote-Addr: 127.0.0.1 ACCEPT-CHARSET: EUC-KR,utf-8;q=0.7,*;q=0.7 Content-Length: HOST: localhost:8080 ACCEPT-ENCODING: gzip,deflate CONNECTION: keep-alive ACCEPT: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Segmentation fault And I'm stuck there. Seo Sanghyeon _______________________________________________ users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
