README ====== This is the repository for the RestyScript compiler for OpenResty written in Haskell. Support for both OpenResty Views and Actions is provided. To build this program, you should first install GHC 6.8.2 (or better), its Parsec, bytestring, and json libraries. One can get GHC source code or binaries from http://www.haskell.org/ghc/ On Ubuntu/Debian, the following commands would install the first two prerequisites. $ sudo apt-get install ghc6 libghc6-parsec-dev The last two dependencies, the json library and bytestring 0.9.1.0 (or better), require a few more commands to install: $ wget http://hackage.haskell.org/packages/archive/json/0.3.3/json-0.3.3.tar.gz $ tar -xzf json-0.3.3.tar.gz $ cd json-0.3.3 $ runghc Setup.hs configure --with-compiler=ghc-6.8.2 $ runghc Setup.hs build $ sudo runghc Setup.hs install And similarly $ wget http://hackage.haskell.org/packages/archive/bytestring/0.9.1.0/bytestring-0.9.1.0.tar.gz $ tar -xzf bytestring-0.9.1.0.tar.gz $ cd bytestring-0.9.1.0/ $ runghc Setup.lhs configure $ runghc Setup.lhs build $ sudo runghc Setup.lhs install After that, you can build this compiler by the following command: $ make The resulting binary executable will be bin/restyscript. To build an optimized version (with -O2 set) of the compilers, you can use $ make optimized instead. Also, a "clean" target is provided to remove the stuff generated by the default make target. $ make clean You can play with it on the command line. For instance, $ echo 'select 3.14' | bin/restyscript view ast rs Query [Select [Float 3.14]] select 3.14 The first line of output is the internal AST (Abstract Syntax Tree) used by the compiler while the second line is the (canonicalized) RestyScript emtted from the AST. In the sample above, the resulting RestyScript output is exactly the same as the input. The compiler also comes with a test suite driven by Perl. The scaffold requires the CPAN modules Test::Base and IPC::Run3. Typically you can install these two by the following commands: $ sudo cpan IPC::Run3 Test::Base To run the test suite, simply issue $ make test The test cases in the test suite (e.g. t/emit-frags.t and t/action/emit-frags.t) tell you what these two compilers are currently able to do. == ABOUT OpenHesty This directory also contains a naive Haskell implementaton for the whole OpenResty server, but it's still under work. To build bin/openhesty, try $ make openhesty Note that the following extra Haskell libraries from HackageDB are required to install first: cgi fastcgi bytestring pcre-light safe hsql hsql-postgresql You need to configure fastcgi in lighttpd or apache, as below fastcgi.server = ( "/=" => ( "localhost" => ( "socket" => "/tmp/openresty.socket", "check-local" => "disable", "bin-path" => "/path/to/haskell/bin/openhesty", "bin-environment" => ( "OPENRESTY_URL_PREFIX" => "", "OPENRESTY_COMMAND" => "fastcgi", ), "min-procs" => 1, "max-procs" => 5, "max-load-per-proc" => 1, "idle-timeout" => 20, ) ) ) To run the little tests, try the following command: $ make test-openhesty