Deploying Ruby on Rails as J2EE application
If you haven’t tried Ruby on Rails because was too busy developing your J2EE applications, now you have no more excuses! It’s possible (and surprisingly simple) to deploy a RoR application in your favorite J2EE server just by following these few steps:
Get JRuby and install the Ruby on Rails gem:
gem install rails --include-dependencies --no-rdoc --no-ri2) Create a simple test application
Run the following commands to set up your new application:
rails test_app
cd test_appYou’ll have to edit the first line of the created scripts (’script‘ directory) to use JRuby:
#!/usr/bin/env jruby
And at this point you’re ready to test your application:
script/server
Open http://localhost:3000 and check if your application is running as it should.
Now let’s create some functionality. First, edit your config/database.yml file, defining your development and production database as it follows. Note that we don’t need the test database and we can use the same database for both development and production for the scope of this example:
adapter: mysql database: test_app user: root password: xxx host: localhost
Create a scaffold:
script/generate scaffold Dog name:string rake db:drop:all rake db:create:all rake db:migrate
At this point you’re already able to point your browser to http://localhost:3000/dogs and start playing with with your database.
3) Install the JDBC adapter and change your application
In order to deploy as a Java web application, you’ll have to replace the database adapter by a JDBC one. To achieve this, first you need a new gem:
gem install activerecord-jdbc-adapter --no-rdoc --no-riYou also need to copy your mysql driver (JAR file) to your JRUBY_HOME/lib directory and edit your database.yml once more:
adapter: jdbc driver: com.mysql.jdbc.Driver url: jdbc:mysql://localhost/test_app username: root password: xxx host: localhost
Restart your server and, since we just changed its configuration, everything should be still working exactly as before.
4) Install Goldspike and create your WAR file
In your application directory, install the plugin:
script/plugin install http://jruby-extras.rubyforge.org/svn/trunk/rails-integration/plugins/goldspikeTo include your database driver in the generated archive, you have a few options (Maven is one of them), but for now let’s just copy it to the ‘WEB-INF/lib’ directory of the application:
mkdir WEB-INF/lib cp $JRUBY_HOME/lib/mysql-connector-java-5.0.5-bin.jar WEB-INF/lib
You also need to edit the app/controllers/application.rb file and include the line:
protect_from_forgery :secret => '6dc47d156f8f3724e4634c37bc0f9f94'
Finally, to create your WAR file, run:
rake war:standalone:create
Deploy the generated file in your favorite J2EE server like Tomcat or WebLogic.
Conclusion
The integration between Ruby on Rails and Java is easier than most people would expect, and it may become a new option to develop your next web application. That may be also a great motivation to learn JRuby and start taking advantage of its integration with existing Java code.
Hi.
Everything went fine ’till the test with the new database.yml (using the jdbc) configuration. My JRUBY_PATH its ok too (I’m under WINXP).
But, when I start de Webrick I get this annoying message:
“C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:231:in `establish_connection’: Please install the jdbc adapter: `gem install activerecord-jdbc-adapter` (no such file to load — java) (RuntimeError)”
But I’ve already installed the jdbc adapter and copied the “mysql-connector-java-5.1.6-bin.jar” to JRUBY_HOME/lib
Any sugestion?
Thanks in advance!
Oh, I forgot, my PATH it’s ok too. I can use jruby in my command window as well, so, I think, there isn’t any problem with the ’script‘ directory.
If you’re sure the activerecord-jdbc-adapter gem is installed correctly, try taking a look in the script files generated by rails. Are they pointing to Ruby or JRuby?
Yes, I’ve set all files in the script directory to use jruby. I’ve got the same error again. Looks like the jdbc-adapter isn’t installed… But it is, at least in the C:\ruby (do i need to install it in the jruby directory too?). Netbeans IDE found it when i’ve checked in the gems configurations….
Aha! There you go… While you’re following this article you should forget you have Ruby installed in your machine. All the gems should be managed by the gem script provided by JRuby.
Try removing Ruby from your PATH and installing the gem again. Shout if you have any problems