views:

204

answers:

2

I am trying to deploy a jruby on rails application.

Right now I am running mongrel + Apache2 using reverse proxy from mod_proxy. However, because mongrel_jcluster does not work for the latest versions of jruby, I am only able to run one mongrel server, and cant take advantage of load balancing from apache2.

Is there any way other way to create a mongrel cluster? I'd really prefer mongrel cluster + apache2 to a java servlet type system.

I've tried jetty using the instructions here: http://jetty-rails.rubyforge.org/

but I get the following error when starting up the jetty server, even though I've checked my activerecord-jdbcmysql-adapter gem version under jruby and its there and version 0.9.7

DEPRECATION WARNING: require "activesupport" is deprecated and will be removed in Rails 3. Use require "active_support" instead. (called from /home/andrew/.gem/jruby/1.8/gems/activesupport-2.3.8/lib/activesupport.rb:2)
2010-07-20 17:00:46.820::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
Starting server 3000
2010-07-20 17:00:47.134::INFO:  jetty-6.1.14
2010-07-20 17:01:03.511:/:INFO:  Info: using runtime pool timeout of 30 seconds
2010-07-20 17:01:03.511:/:INFO:  Info: received min runtimes = 1
2010-07-20 17:01:03.511:/:INFO:  Info: received max runtimes = 5
Loading parser from serialized file lib/stanford-parser/englishPCFG.ser.gz ... done [4.6 sec].
2010-07-20 17:01:14.341:/:WARN:  Error: unable to initialize application
org.jruby.rack.RackInitializationException: Please install the jdbcmysql adapter: `gem install activerecord-jdbcmysql-adapter` (no such file to load -- active_record/connection_adapters/jdbcmysql_adapter)

any suggestions would be appreciated, thanks!

EDIT: I don't know if this makes a difference, but I am able to tell that before it crashes, jetty_rails successfully loads a global variable declared in the environment.rb

EDIT: here is my full gem list from jruby -S gem list --local

*** LOCAL GEMS ***

actionmailer (2.3.8)
actionpack (2.3.8)
activerecord (2.3.8)
activerecord-jdbc-adapter (0.9.7)
activerecord-jdbcmysql-adapter (0.9.7)
activeresource (2.3.8)
activesupport (2.3.8)
builder (2.1.2)
gem_plugin (0.2.3)
jdbc-mysql (5.0.4)
jetty-rails (0.8.1)
jruby-jars (1.5.1)
jruby-openssl (0.7)
jruby-rack (1.0.1)
mizuno (0.3.6)
mongrel (1.1.5)
rack (1.1.0)
rails (2.3.8)
rake (0.8.7)
rubyzip (0.9.4)
sources (0.0.1)
warbler (1.1.0)
+1  A: 

Maybe you're switching between multiple ruby interpreters (via RVM or manually). Make sure that you have 2.3.8 gems for rails and it's dependencies by running "gem list" using Jruby.

If you don't have the gems under Jruby, run "gem install -v=2.3.8 rails". You could pack the rails gems inside the project tree by running "rake rails:freeze:gems".

sespindola
I do have the gems under jruby, jruby -S gem list --local gives me a list of the gems and they have the correct version, but jetty is not finding them. freezing the rails gem fixed that exact error, but I got the same error first for rack, which I solved by uninstalling and reinstalling the gem, and now for activerecord-jdbcmysql-adapter which I can't solve (tried uninstalling and reinstalling, and freezing, freezing just did not work)
Andrew
+1  A: 

The only possible answer is that you have two ruby interpreters on the system, and the one being picked up by the jetty environment is missing gems. Does ruby -v give you a different answer than jruby -v?

That being said, is there a reason why you don't want to use warble and deploy a war to Jetty or Tomcat? I find that works well.

Mark Thomas
I thought that might be a problem, so before I posted this question I uninstalled ruby, so ruby -v gives me 'ruby is currently not installed' while jruby -v gives me jruby 1.4.0 (ruby 1.8.7 patchlevel 174) (2010-02-11 6586) (Java HotSpot(TM) Client VM 1.6.0_20) [i386-java]
Andrew