Does anyone have clear instruction for setting up jRuby to work with IIS.
Edit:
What I'm looking for is step by step instructions for getting a Ruby on Rails application working on Windows using IIS and jRuby. The reason being is because I can't find anything other then "use Linux" when asking the question out in the wild. For most people Windows is the primary development and deployment environment so using a Linux based server is out of the question. Also IIS is included with Windows and provide superior integration with Active Directory so using Apache is out of the question also.
Last thing is using war files is a nightmare, please include instructions on how to deploy a rails apps by just copying the files or anything other then using war files.
JRuby is designed to work as a mixed-mode virtual machine for Ruby, where code can be either interpreted directly, just-in-time compiled at runtime to Java bytecode, or ahead-of-time compiled to Java bytecode before execution.
JRuby OverviewIt is a Ruby interpreter written entirely in Java. JRuby allows using Java capabilities with Ruby syntax. It also allows using Ruby libraries from Java. Many programming languages have been implemented on the JVM.
Is it actually just a Rails app you want to deploy on IIS, or must it be JRuby? If it's just Ruby on Rails rather than JRuby, then here is your step-by-step guide. But if it's JRuby you want to get working with IIS, look no further. Below are the steps I followed; my environment is IIS7 on Windows 7 RC, Java 1.6.0_13.
http://dist.codehaus.org/jruby/1.3.1/jruby-bin-1.3.1.tar.gz
.C:\JRuby
.c:\JRuby\jruby-1.3.1
.%JRUBY_HOME%\bin
to the path.I'll walk through the next steps with screen grabs interspersed.
Let's run jruby to confirm that it was installed successfully:
C:\Users\Vinay>jruby -v jruby 1.3.1 (ruby 1.8.6p287) (2009-06-15 2fd6c3d) (Java HotSpot(TM) Client VM 1. 6.0_13) [x86-java]
OK so far. Let's use JRuby to install Rails:
C:\Users\Vinay>gem install json-jruby C:\Users\Vinay>gem install rails --no-rdoc JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed activerecord-2.3.3 Successfully installed rack-1.0.0 Successfully installed actionpack-2.3.3 Successfully installed actionmailer-2.3.3 Successfully installed activeresource-2.3.3 Successfully installed rails-2.3.3 6 gems installed Installing ri documentation for activerecord-2.3.3... Installing ri documentation for rack-1.0.0... Installing ri documentation for actionpack-2.3.3... Installing ri documentation for actionmailer-2.3.3... Installing ri documentation for activeresource-2.3.3... Installing ri documentation for rails-2.3.3...
Let's create a Rails app called jror
:
C:\Users\Vinay\Projects>rails new jror create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create config/locales create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create test/fixtures create test/functional create test/integration create test/performance create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create tmp/pids create Rakefile create README create app/controllers/application_controller.rb create app/helpers/application_helper.rb create config/database.yml create config/routes.rb create config/locales/en.yml create config/initializers/backtrace_silencers.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_rails_defaults.rb create config/initializers/session_store.rb create config/environment.rb create config/boot.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/console create script/dbconsole create script/destroy create script/generate create script/runner create script/server create script/plugin create script/performance/benchmarker create script/performance/profiler create test/test_helper.rb create test/performance/browsing_test.rb create public/404.html create public/422.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log
Let's run WEBrick
to make sure everything's working as expected:
C:\Users\Vinay\Projects\jror>jruby script/server => Booting WEBrick => Rails 2.3.3 application starting on http://0.0.0.0:3000 JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL => Call with -d to detach => Ctrl-C to shutdown server [2009-07-21 17:51:21] INFO WEBrick 1.3.1 [2009-07-21 17:51:21] INFO ruby 1.8.6 (2009-06-15) [java] [2009-07-21 17:51:21] INFO WEBrick::HTTPServer#start: pid=2440 port=3000
Navigate to http://localhost:3000/
and confirm that your Rails application appears.
Sure enough, there it is.
The next thing is to set up a mechanism whereby selected requests made to IIS are proxied to JRuby. To do this, an URL rewriter/reverse proxy is needed. I used ISAPI Rewrite 3 for this. You may choose to use a different tool (for example, Microsoft ISA). ISAPI Rewrite 3 is good value at $99 per server, and comes with a 45-day trial period.
For ISAPI Rewrite 3, I set up the httpd.conf
configuration file as follows:
RewriteEngine on RewriteBase / RewriteLog "C:\temp\rewrite.log" RewriteLogLevel 9 RewriteProxy jror/(.*) http://localhost:3000/$1
This proxies URLs of the form
http://localhost/jror/abc123
to
http://localhost:3000/abc123
So now, we can navigate to http://localhost/jror/
and see the request served by JRuby but through IIS:
And guess what: no wars! Any changes to your Rails app should come through directly.
Here's a screenshot of my Firebug console showing the response headers for that page:
Of course this is more of a development setup than a production one - but for production use you will probably need to use a production-ready appserver such as Glassfish, which will entail use of those pesky wars ;-)
If and when you do want to deploy to a Java appserver using wars, you can use Warbler for easy packaging of your app into a war.
To run on Glassfish V3, some additional steps are required. The quickest way to deploy and run your Rails applications is to use the GlassFish gem, which consists of only the GlassFish v3 kernel (Grizzly
) and some utilities, so giving a minimum-bloat setup. Let's install the gem:
C:\Users\Vinay\Projects\jror>gem install glassfish JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed glassfish-0.9.5-universal-java 1 gem installed Installing ri documentation for glassfish-0.9.5-universal-java... Installing RDoc documentation for glassfish-0.9.5-universal-java...
Run the Rails app on Glassfish:
C:\Users\Vinay\Projects>glassfish jror Starting GlassFish server at: 192.168.0.17:3000 in development environment... Writing log messages to: jror/log/development.log. Press Ctrl+C to stop.
As you can see, you're running on Glassfish but still no wars are required! No changes are needed on the IIS side, other than (in httpd.conf
in my setup) changing the proxy to point to the IP address and port used by the Glassfish server. If you want to go the whole hog and install the full Glassfish server and run Rails apps on it, you may as well follow these instructions from the Glassfish team. They cover installing and running the Glassfish, server, deploying and undeploying Rails applications and running the applications in production mode.
Here's what you need to create war files for the full Glassfish server.
Install Warbler:
C:\Users\Vinay\Projects>gem install warbler JRuby limited openssl loaded. gem install jruby-openssl for full support. http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL Successfully installed warbler-0.9.13 1 gem installed Installing ri documentation for warbler-0.9.13... Installing RDoc documentation for warbler-0.9.13...
Run Warbler:
C:\Users\Vinay\Projects\jror>warble mkdir -p tmp/war/WEB-INF/gems/specifications cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/rails-2.3.3.gemspec tm /war/WEB-INF/gems/specifications/rails-2.3.3.gemspec mkdir -p tmp/war/WEB-INF/gems/gems cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/rake-0.8.7.gemspec tmp war/WEB-INF/gems/specifications/rake-0.8.7.gemspec cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/activesupport-2.3.3.ge spec tmp/war/WEB-INF/gems/specifications/activesupport-2.3.3.gemspec cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/activerecord-2.3.3.gem pec tmp/war/WEB-INF/gems/specifications/activerecord-2.3.3.gemspec cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/actionpack-2.3.3.gemsp c tmp/war/WEB-INF/gems/specifications/actionpack-2.3.3.gemspec cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/rack-1.0.0.gemspec tmp war/WEB-INF/gems/specifications/rack-1.0.0.gemspec cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/actionmailer-2.3.3.gem pec tmp/war/WEB-INF/gems/specifications/actionmailer-2.3.3.gemspec cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/specifications/activeresource-2.3.3.g mspec tmp/war/WEB-INF/gems/specifications/activeresource-2.3.3.gemspec mkdir -p tmp/war/WEB-INF/app mkdir -p tmp/war/WEB-INF/config mkdir -p tmp/war/WEB-INF/lib mkdir -p tmp/war/WEB-INF/log mkdir -p tmp/war/WEB-INF/vendor mkdir -p tmp/war/WEB-INF/tmp mkdir -p tmp/war/WEB-INF/app/controllers mkdir -p tmp/war/WEB-INF/app/helpers mkdir -p tmp/war/WEB-INF/app/models mkdir -p tmp/war/WEB-INF/app/views cp app/controllers/application_controller.rb tmp/war/WEB-INF/app/controllers/ap lication_controller.rb cp app/helpers/application_helper.rb tmp/war/WEB-INF/app/helpers/application_he per.rb mkdir -p tmp/war/WEB-INF/app/views/layouts cp config/boot.rb tmp/war/WEB-INF/config/boot.rb cp config/database.yml tmp/war/WEB-INF/config/database.yml cp config/environment.rb tmp/war/WEB-INF/config/environment.rb mkdir -p tmp/war/WEB-INF/config/environments mkdir -p tmp/war/WEB-INF/config/initializers mkdir -p tmp/war/WEB-INF/config/locales cp config/routes.rb tmp/war/WEB-INF/config/routes.rb cp config/environments/development.rb tmp/war/WEB-INF/config/environments/devel pment.rb cp config/environments/production.rb tmp/war/WEB-INF/config/environments/produc ion.rb cp config/environments/test.rb tmp/war/WEB-INF/config/environments/test.rb cp config/initializers/backtrace_silencers.rb tmp/war/WEB-INF/config/initialize s/backtrace_silencers.rb cp config/initializers/inflections.rb tmp/war/WEB-INF/config/initializers/infle tions.rb cp config/initializers/mime_types.rb tmp/war/WEB-INF/config/initializers/mime_t pes.rb cp config/initializers/new_rails_defaults.rb tmp/war/WEB-INF/config/initializer /new_rails_defaults.rb cp config/initializers/session_store.rb tmp/war/WEB-INF/config/initializers/ses ion_store.rb cp config/locales/en.yml tmp/war/WEB-INF/config/locales/en.yml mkdir -p tmp/war/WEB-INF/lib/tasks mkdir -p tmp/war/WEB-INF/vendor/plugins mkdir -p tmp/war/WEB-INF/tmp/cache mkdir -p tmp/war/WEB-INF/tmp/pids mkdir -p tmp/war/WEB-INF/tmp/sessions mkdir -p tmp/war/WEB-INF/tmp/sockets cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/gems/warbler-0.9.13/lib/jruby-complet -1.3.0RC1.jar tmp/war/WEB-INF/lib/jruby-complete-1.3.0RC1.jar cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/gems/warbler-0.9.13/lib/jruby-complet -1.3.0RC1.jar tmp/war/WEB-INF/lib/jruby-complete-1.3.0RC1.jar cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/gems/warbler-0.9.13/lib/jruby-rack-0. .4.jar tmp/war/WEB-INF/lib/jruby-rack-0.9.4.jar cp C:/JRuby/jruby-1.3.1/lib/ruby/gems/1.8/gems/warbler-0.9.13/lib/jruby-rack-0. .4.jar tmp/war/WEB-INF/lib/jruby-rack-0.9.4.jar cp public/404.html tmp/war/404.html cp public/422.html tmp/war/422.html cp public/500.html tmp/war/500.html cp public/favicon.ico tmp/war/favicon.ico mkdir -p tmp/war/images cp public/index.html tmp/war/index.html mkdir -p tmp/war/javascripts cp public/robots.txt tmp/war/robots.txt mkdir -p tmp/war/stylesheets cp public/images/rails.png tmp/war/images/rails.png cp public/javascripts/application.js tmp/war/javascripts/application.js cp public/javascripts/controls.js tmp/war/javascripts/controls.js cp public/javascripts/dragdrop.js tmp/war/javascripts/dragdrop.js cp public/javascripts/effects.js tmp/war/javascripts/effects.js cp public/javascripts/prototype.js tmp/war/javascripts/prototype.js mkdir -p tmp/war/WEB-INF jar cf jror.war -C tmp/war . C:\Users\Vinay\Projects\jror>dir jror.war Volume in drive C has no label. Volume Serial Number is 0C8D-1418 Directory of C:\Users\Vinay\Projects\jror 22/07/2009 15:55 13,180,634 jror.war 1 File(s) 13,180,634 bytes 0 Dir(s) 7,730,462,720 bytes free
Phew!
You need first to install Tomcat. See this how-to for setting up Tomcat together with IIS.
With JRuby you are going to build WAR files. Just drop these into Tomcat's webapps folder and you are ready to go.
Update: Ok, you need to integrate two technologies that weren't meant to be used together: IIS and JRuby. The good thing is that JRuby is both Java and Ruby and you can use the best from both worlds. Ruby is more productive and fun to code with, but Java is better for deployment (especially when need to do so with IIS). So my advice still holds. Create a war file, install Tomcat and deploy the war file there. Deploying the war file is as easy as copying it in the webapps folder. These are the steps you need to follow:
If you still do not want to use WAR files have a look at this blog spot. It describes how you can run RoR with IIS. I believe that for JRuby the procedure would be just the same. Anyway, a CGI approach is the only way if you want to avoid WAR files.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With