From 44eeb7a0f78cdbf0a77c351156dae81d3c57e615 Mon Sep 17 00:00:00 2001 From: bjorn Date: Thu, 16 Oct 2008 13:39:09 +0000 Subject: [PATCH] A bunch of changes that make it easy to run the gf server with lighttpd --- src/server/Makefile | 8 +- src/server/README | 22 +++++- src/server/gf-server-jsapi.js | 27 ++++++- src/server/gf-server.cabal | 2 +- .../gwt-client/Translate-shell-external | 2 +- .../cs/gf/gwt_translate/client/Translate.java | 2 +- src/server/lighttpd.conf | 78 +++++++++++++++++++ .../{gf-client.html => simple-client.html} | 5 +- 8 files changed, 131 insertions(+), 15 deletions(-) create mode 100644 src/server/lighttpd.conf rename src/server/{gf-client.html => simple-client.html} (96%) diff --git a/src/server/Makefile b/src/server/Makefile index 806a620cf..574a2aeca 100644 --- a/src/server/Makefile +++ b/src/server/Makefile @@ -1,11 +1,11 @@ GFCFLAGS = +RTS -K100M -RTS --cpu -.PHONY: gf.fcgi food demo +.PHONY: pgf.fcgi food demo -gf.fcgi: +pgf.fcgi: cabal configure cabal build - cp dist/build/gf.fcgi/gf.fcgi . + cp dist/build/pgf.fcgi/pgf.fcgi . gwt: gwt-client/Translate-compile @@ -34,7 +34,7 @@ lang.pgf: LangBul-noparse.pgf LangCat-noparse.pgf LangDan-parse.pgf LangEng-pars test.pgf: LangEng-parse.pgf LangGer-parse.pgf gfc $(GFCFLAGS) --name=test $^ -gwt-installball: gf.fcgi gwt +gwt-installball: pgf.fcgi gwt rm -rf tmp/gwt-client rm -f gf-server-installball.tar.gz mkdir -p tmp/gwt-client diff --git a/src/server/README b/src/server/README index b9da09798..7e93cd41f 100644 --- a/src/server/README +++ b/src/server/README @@ -24,7 +24,25 @@ $ make $ make food -== Running == + + +== Running (lighttpd) == + +- Install lighttpd + - MacPorts: + $ sudo port install lighttpd + +- Run lighttpd: + $ lighttpd -f lighttpd.conf -D + +- First test from the command-line, since debugging is harder from the AJAX UI: + $ curl 'http://localhost:41296/gf/translate?input=this+fish&cat=Item&from=FoodEng' + + +- Go to http://localhost:41296/simple-client.html in your web browser. + + +== Running (Apache) == - Make sure that your web server supports FastCGI. For Apache on OS X, do this: @@ -89,4 +107,4 @@ $ curl 'http://localhost/~bringert/gf-server/gf.fcgi/translate?input=this+fish&c - Check server logs (e.g. /var/log/httpd/error_log) if it doesn't work. -- Go to SERVER_URL/gf-client.html in your web browser. +- Go to SERVER_URL/simple-client.html in your web browser. diff --git a/src/server/gf-server-jsapi.js b/src/server/gf-server-jsapi.js index dfa50c2f7..6cf6afbc3 100644 --- a/src/server/gf-server-jsapi.js +++ b/src/server/gf-server-jsapi.js @@ -1,17 +1,36 @@ var gf = new Object(); +var pgf_base_url = "pgf" gf.translate = function (input,from,to,cat,callback) { - gf.httpGetText("gf.fcgi/translate?input="+escape(input)+"&from="+escape(from)+"&to="+escape(to)+"&cat="+escape(cat), function (output) { callback(gf.readJSON(output)); }); + var args = []; + args["input"] = input; + args["from"] = from; + args["to"] = to; + args["cat"] = cat; + gf.callFunction("translate", args, callback); }; gf.complete = function (input,from,cat,callback) { - gf.httpGetText("gf.fcgi/complete?input="+escape(input)+"&from="+escape(from)+"&cat="+escape(cat), function (output) { callback(gf.readJSON(output)); }); + var args = []; + args["input"] = input; + args["from"] = from; + args["cat"] = cat; + gf.callFunction("complete", args, callback); }; -gf.languages = function (callback) { - gf.httpGetText("gf.fcgi/languages", function (output) { callback(gf.readJSON(output)); }); +gf.grammar = function (callback) { + gf.callFunction("grammar", [], callback); }; +gf.callFunction = function (fun, args, callback) { + var query = ""; + for (var i in args) { + query += (query == "") ? "?" : "&"; + query += i + "=" + escape(args[i]); + } + gf.httpGetText(pgf_base_url + "/" + fun + query, function (output) { callback(gf.readJSON(output)); }); +} + gf.httpGetText = function (url, callback) { var XMLHttpRequestObject = false; diff --git a/src/server/gf-server.cabal b/src/server/gf-server.cabal index 2256e5cfe..b2f01bcc5 100644 --- a/src/server/gf-server.cabal +++ b/src/server/gf-server.cabal @@ -6,7 +6,7 @@ license: GPL license-file: LICENSE synopsis: FastCGI Server for Grammatical Framework -executable gf.fcgi +executable pgf.fcgi build-depends: base, old-time, unix, diff --git a/src/server/gwt-client/Translate-shell-external b/src/server/gwt-client/Translate-shell-external index aaa6bb45a..1db5e252b 100644 --- a/src/server/gwt-client/Translate-shell-external +++ b/src/server/gwt-client/Translate-shell-external @@ -1,3 +1,3 @@ #!/bin/sh APPDIR=`dirname $0`; -java -XstartOnFirstThread -Xmx256M -cp "$APPDIR/src:$APPDIR/bin:/Users/bringert/src/gwt-mac-1.5.2/gwt-user.jar:/Users/bringert/src/gwt-mac-1.5.2/gwt-dev-mac.jar" com.google.gwt.dev.GWTShell -out "$APPDIR/www" -noserver "$@" http://localhost/~bringert/gwt-client/se.chalmers.cs.gf.gwt_translate.Translate/Translate.html; +java -XstartOnFirstThread -Xmx256M -cp "$APPDIR/src:$APPDIR/bin:/Users/bringert/src/gwt-mac-1.5.2/gwt-user.jar:/Users/bringert/src/gwt-mac-1.5.2/gwt-dev-mac.jar" com.google.gwt.dev.GWTShell -out "$APPDIR/www" -noserver "$@" http://localhost:41296/gwt-client/se.chalmers.cs.gf.gwt_translate.Translate/Translate.html; diff --git a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java index 2fb9ca962..d5fd78db6 100644 --- a/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java +++ b/src/server/gwt-client/src/se/chalmers/cs/gf/gwt_translate/client/Translate.java @@ -30,7 +30,7 @@ import java.util.Set; public class Translate implements EntryPoint { - private static final String gfBaseURL = "/~bringert/gf-server/gf.fcgi"; + private static final String gfBaseURL = "/pgf"; private GF gf; diff --git a/src/server/lighttpd.conf b/src/server/lighttpd.conf new file mode 100644 index 000000000..8bce905e4 --- /dev/null +++ b/src/server/lighttpd.conf @@ -0,0 +1,78 @@ +#Run with (with -D for no-daemon) +# /usr/sbin/lighttpd -f lighttpd.conf -D +# + +server.modules = ( + "mod_access", + "mod_fastcgi", + "mod_accesslog" ) +var.basedir = var.CWD + +server.document-root = basedir + +## where to send error-messages to +server.errorlog = basedir + "/error.log" + +# files to check for if .../ is requested +index-file.names = ( "index.php", "index.html", + "index.htm", "default.htm" ) + +## set the event-handler (read the performance section in the manual) +# server.event-handler = "freebsd-kqueue" # needed on OS X # Crashes on osx +server.event-handler = "poll" +#server.event-handler = "select" + +# mimetype mapping +mimetype.assign = ( + ".gif" => "image/gif", + ".jpg" => "image/jpeg", + ".jpeg" => "image/jpeg", + ".png" => "image/png", + ".css" => "text/css", + ".html" => "text/html", + ".htm" => "text/html", + ".js" => "text/javascript", + # default mime type + "" => "application/octet-stream", + ) + +accesslog.filename = basedir + "/access.log" + +fastcgi.debug = 0 +fastcgi.server = ( "/pgf" => + ( "localhost" => + ( + "socket" => "/tmp/fastcgi.socket", + "bin-path" => basedir + "/pgf.fcgi", + "bin-environment" => ("GHCRTS" => "-N2", + "PGF_FILE" => "grammar.pgf"), + "min-procs" => 1, + "max-procs" => 1, + "check-local" => "disable" + ) + ) + ) + + +## deny access the file-extensions +# +# ~ is for backupfiles from vi, emacs, joe, ... +# .inc is often used for code includes which should in general not be part +# of the document-root +url.access-deny = ( "~", ".inc" ) + +$HTTP["url"] =~ "\.pdf$" { + server.range-requests = "disable" +} + +## +# which extensions should not be handle via static-file transfer +# +# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi +static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) + +######### Options that are good to be but not neccesary to be changed ####### + +## bind to port (default: 80) +server.port = 41296 + diff --git a/src/server/gf-client.html b/src/server/simple-client.html similarity index 96% rename from src/server/gf-client.html rename to src/server/simple-client.html index f613d883f..5d320acdb 100644 --- a/src/server/gf-client.html +++ b/src/server/simple-client.html @@ -22,9 +22,10 @@ gf.translate(input, fromLang, toLang, '', callback); } - function populateLangs (langs) { + function populateLangs (grammar) { var f = document.getElementById('fromLang'); var t = document.getElementById('toLang'); + var langs = grammar.languages; for (var i in langs) { if (langs[i].canParse) { addOption(f, langs[i].name, langs[i].name); @@ -63,7 +64,7 @@ } function initialize() { - gf.languages(populateLangs); + gf.grammar(populateLangs); } AJAX GF Translator