Das GlassFish-Gem von Vivek Pandey ist in der Version 1.0.0 erschienen.

Neuerungen sind neben einigen BugFixes:
  1. die Implementierung mittels des neu erschienen Glassfish v3 Servers
  2. die Startzeit wurde um ca. 15% verbessert
  3. die Unterstützung von Rack (Ruby Webserver Interface) ist komplett
  4. es ist möglich, Glassfish mittels eines Codeblockes auszuführen
    GlassFish::Server.start(:address=>"127.0.0.1", :port=>4000) do
      use Rack::CommonLogger
      use Rack::ShowExceptions
      map "/hello" do
        use Rack::Lint
        run Proc.new {[200, {"Content-Type" => "text/html"}, "Hello"]}
      end
    end
    
  5. der Sinatra-Support wurde verbessert
  6. auf der Kommandozeile kann die IP Adresse mitgegeben werden
  7. die Konfiguration von Grizzly (NIO based HTTP Lib) kann mittels der glassfish.yml festgelegt werden
  8. man findet es nun auch bei GemCutter
Was ist eigentlich das GlassFish-Gem?

Das Gem kurz erklärt

Das GlassFish-Gem ist eine Deployment Strategy mit der man Ruby on Rails Anwendungen mittels JRuby direkt von der Kommandozeile starten kann. Analog zu Mongrel oder Webrick kann man seine Rails-Anwendung nur mit Hilfe eines Gems starten. Die Installation eines kompletten Java Application Servers kann entfallen.

Installation und erstes Starten

  1. Das Gem mittels gem install glassfish installieren.
  2. In das Rails-Anwendungsverzeichnis wechseln und mittels glassfish den GlassFish-Server starten. GlassFish startet mit den default Einstellungen.
  3. Unter 127.0.0.1:3000 ist der Server erreichbar.

Konfiguration

Beim Starten kann man dem GlassFish-Server einige Paramter mitgeben. Mittels glassfish -h bekommt man eine Übersicht der Möglichkeiten angezeigt.
glassfish [OPTION] APPLICATION_PATH
        -h, --help:             show help
        -c, --contextroot PATH: change the context root (default: '/')
        -p, --port PORT:        change server port (default: 3000)
        -a, --address HOST:     bind to HOST address (default: 0.0.0.0)
        -e, --environment ENV:  change rails environment (default: development)
        -n --runtimes NUMBER:   Number of JRuby runtimes to create initially
        --runtimes-min NUMBER:  Minimum JRuby runtimes to create
        --runtimes-max NUMBER:  Maximum number of JRuby runtimes to create
        -d, --daemon:           Run GlassFish as daemon. Currently works with
                                    Linux and Solaris OS.
        -P, --pid FILE:         PID file where PID will be written. Applicable
                                    when used with -d option. The default pid file
                                    is tmp/pids/glassfish-<PID>.pid
        -l, --log FILE:         Log file, where the server log messages will go.
                                    By default the server logs go to
                                    log/development.log file. To see the logs on
                                    console run with -l option without any argument.
        --log-level LEVEL:      Log level 0 to 7. 0:OFF, 1:SEVERE, 2:WARNING,
                                    3:INFO (default), 4:FINE, 5:FINER, 6:FINEST,
                                    7:ALL.
        --config FILE:          Configuration file location. Use glassfish.yml
                                    as template. Generate it using 'gfrake config'
                                    command.

        APPLICATION_PATH (optional): Path to the application to be run (default:
        current).

        For further configuration, run GlassFish rake command 'gfrake -T'
Man kann nun entweder die Parameter auf der Kommandozeile angeben (glassfish -p <port> -e production -c <context> -d) oder mittels des Rake-Tasks gfrake config eine glassfish.yml-Datei im /config-Verzeichnis der Rails-Anwendung erzeugen. Die dann in der glassfish.yml angegeben Einstellungen werden bei Ausführung von glassfish ausgelesen und genutzt.

Deployment mittels Capistrano

Jacob Kessler stellt in seinem Blog ein Capistrano-Rezept vor, mit dem das Deployment von Rails-Anwendungen auf den GlassFish zum Kinderspiel wird.
set :context_root, "/"
set :jruby_location, "/home/objectfab/jruby/"
set :gf_port, "3000"
set :environment, "production"
set :jruby_runtimes, "1"
set :jruby_min_runtimes, "1"
set :jruby_max_runtimes, "2"

namespace :gem do 
  desc "Start Glassfish Gem from a shutdown state"
  task :cold do
    start
  end

  desc "Stop a server running Glassfish Gem"
  task :stop do
    run "kill -INT $(cat #{current_path}/capistrano-#{application})"
  end

  desc "Starts a server running Glassfish Gem"
  task :start do
    run "#{jruby_location}bin/jruby -S glassfish --contextroot #{context_root} --port #{gf_port} --environment #{environment} --runtimes #{jruby_runtimes} --runtimes-min #{jruby_min_runtimes} --runtimes-max #{jruby_max_runtimes} -P #{current_path}/capistrano-#{application} --daemon #{release_path}"
  end

  desc "Restarts a server running Glassfish Gem"
  task :restart do
    stop
    start
  end
end
GlassFish Gem 1.0.0 is available
GlassFish Gem 1.0.0 Release Notes
RubyForge GlassFish Gem
GemCutter GlassFish Gem
GlassFish Wiki JRuby
JRuby on Rails With GlassFish Gem