Инструкции по настройке IIS и jRuby

У кого-нибудь есть четкая инструкция по настройке jRuby для работы с IIS.

Редактировать:

Я ищу пошаговые инструкции по созданию приложения Ruby on Rails, работающего в Windows с использованием IIS и jRuby. Причина в том, что я не могу найти ничего, кроме «использовать Linux», когда задаю вопрос в дикой природе. Для большинства людей Windows является основной средой разработки и развертывания, поэтому об использовании сервера на базе Linux не может быть и речи. Кроме того, IIS входит в состав Windows и обеспечивает превосходную интеграцию с Active Directory, поэтому об использовании Apache также не может быть и речи.

И последнее, что использование war-файлов — это кошмар, пожалуйста, включите инструкции о том, как развернуть приложения rails, просто скопировав файлы или что-то еще, кроме использования war-файлов.


person rip747    schedule 06.07.2009    source источник
comment
Я думаю, что вы идете неправильным путем, пытаясь избежать файлов войны. В долгосрочной перспективе будет намного проще, если вы потратите некоторое время на изучение файлов войны, а не на попытки обойти их.   -  person James McMahon    schedule 21.07.2009
comment
Я существенно обновил свой ответ, чтобы показать пошаговое руководство по JRuby и IIS без WARS :-)   -  person Vinay Sajip    schedule 22.07.2009
comment
Я обновил пошаговое руководство, чтобы показать создание войны с помощью Warbler и запуск приложений JRuby/Rails на Glassfish через IIS. Наслаждаться :-)   -  person Vinay Sajip    schedule 22.07.2009


Ответы (2)


Это на самом деле просто приложение Rails, которое вы хотите развернуть в IIS, или это должен быть JRuby? Если это просто Ruby on Rails, а не JRuby, тогда вот ваше пошаговое руководство. Но если вы хотите работать с IIS на JRuby, не ищите дальше. Ниже приведены шаги, которые я выполнил; моя среда — IIS7 в Windows 7 RC, Java 1.6.0_13.

  1. Сначала я скачал JRuby с http://dist.codehaus.org/jruby/1.3.1/jruby-bin-1.3.1.tar.gz.
  2. Затем я распаковал архив в C:\JRuby.
  3. Я установил переменную среды JRUBY_HOME в c:\JRuby\jruby-1.3.1.
  4. Я добавил %JRUBY_HOME%\bin к пути.

Я пройдусь по следующим шагам с вкраплениями скриншотов.

Давайте запустим jruby, чтобы убедиться, что он успешно установлен:

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]

ОК пока. Давайте используем JRuby для установки 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...

Давайте создадим приложение Rails с именем 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

Давайте запустим WEBrick, чтобы убедиться, что все работает как положено:

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

Перейдите к http://localhost:3000/ и убедитесь, что ваше приложение Rails появилось.

Приложение Rails на WEBrick

Конечно же, вот оно.

Следующим шагом является настройка механизма, с помощью которого выбранные запросы к IIS передаются через прокси в JRuby. Для этого необходим переписчик URL/обратный прокси-сервер. Для этого я использовал ISAPI Rewrite 3. Вы можете использовать другой инструмент (например, Microsoft ISA). ISAPI Rewrite 3 стоит 99 долларов за сервер и поставляется с 45-дневным пробным периодом.

Для ISAPI Rewrite 3 я настроил файл конфигурации httpd.conf следующим образом:

RewriteEngine on
RewriteBase /
RewriteLog "C:\temp\rewrite.log"
RewriteLogLevel 9
RewriteProxy jror/(.*) http://localhost:3000/$1

Это проксирует URL-адреса формы

http://localhost/jror/abc123

to

http://localhost:3000/abc123

Итак, теперь мы можем перейти к http://localhost/jror/ и увидеть запрос, обслуживаемый JRuby, но через IIS:

Приложение Rails на WEBrick через IIS

И знаете что: никаких войн! Любые изменения в вашем приложении Rails должны проходить напрямую.

Вот скриншот моей консоли Firebug, показывающий заголовки ответов для этой страницы:

альтернативный текст

Конечно, это скорее настройка для разработки, чем для производства, но для использования в производстве вам, вероятно, потребуется использовать готовый к работе сервер приложений, такой как Glassfish, что повлечет за собой использование этих надоедливых войн ;-)

Если и когда вы хотите выполнить развертывание на сервере приложений Java с помощью войн, вы можете использовать Warbler для простого упаковка вашего приложения в войну.

Для работы на Glassfish V3 необходимо выполнить некоторые дополнительные действия. Самый быстрый способ развернуть и запустить ваши приложения Rails — это использовать гем GlassFish, который состоит только из ядра GlassFish v3 (Grizzly) и некоторых утилит, что обеспечивает минимальную настройку. Давайте установим гем:

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...

Запустите приложение Rails на 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.

Как видите, вы работаете на Glassfish, но никаких войн не требуется! На стороне IIS не требуется никаких изменений, кроме (в httpd.conf в моей настройке) изменения прокси-сервера, чтобы он указывал на IP-адрес и порт, используемые сервером Glassfish. Если вы хотите пойти на все и установить полный сервер Glassfish и запускать на нем приложения Rails, вы также можете следовать эти инструкции от команды Glassfish. Они охватывают установку и запуск сервера Glassfish, развертывание и отмену развертывания приложений Rails, а также запуск приложений в производственном режиме.

Вот что вам нужно для создания файлов войны для полного сервера Glassfish.

Установить Славку:

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...

Запускаем Славку:

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

Фу!

person Vinay Sajip    schedule 20.07.2009
comment
Ok. я забуду про военный файл. если вы опубликуете инструкции по подключению jruby к iis с помощью Glassfish, я приму ваш ответ и дам вам награду. извините, что я такая боль, но я хочу, чтобы люди могли найти эти инструкции в одном месте. - person rip747; 22.07.2009
comment
Только я думаю, что этот ответ демонстрирует, что система наград SO действительно работает? Представьте, сколько вам пришлось бы заплатить кому-то, чтобы получить информацию такого уровня? - person DanSingerman; 22.07.2009
comment
Вообще-то, Дэн, так получилось, что мне пришлось делать подобную настройку (правда, не с Glassfish) для другого проекта. Правда, я приложил немного усилий к этому ответу, но это также и для моей будущей ссылки. Я легко нашел этот уровень информации в блогах людей, где не было никаких вознаграждений, и нет никаких сомнений в том, что вознаграждение приятно иметь. Но не стоит тратить время просто на награду. - person Vinay Sajip; 22.07.2009
comment
убедитесь, что JAVA_HOME также находится в вашем пути или получит. Система не может найти указанный путь при попытке запустить jruby - person rip747; 24.07.2009
comment
еще одна вещь, которую нужно убедиться, это то, что sqlite gem установлен, иначе вы будете забивать свой хвост ошибками. введите эту команду сразу после установки рельсов: jruby -S gem install activerecord-jdbcsqlite3-adapter - person rip747; 27.07.2009
comment
Да, я не упомянул эту часть, так как не знал, что вы используете SQLite. Также стоит взглянуть на activerecord-jdbc-adapter Ника Зигера (github.com/nicksieger/ activerecord-jdbc-adapter/tree/master) для использования с другими JDBC-совместимыми базами данных. - person Vinay Sajip; 27.07.2009

Сначала вам нужно установить Tomcat. См. это инструкции по настройке Tomcat вместе с IIS.

С JRuby вы собираетесь создавать файлы WAR. Просто поместите их в папку веб-приложений Tomcat, и вы готовы к работе.

Обновление: хорошо, вам нужно интегрировать две технологии, которые не предназначены для совместного использования: IIS и JRuby. Хорошо то, что JRuby — это и Java, и Ruby, и вы можете использовать лучшее из обоих миров. Ruby более продуктивен и интересен для написания кода, но Java лучше подходит для развертывания (особенно когда это нужно делать с IIS). Так что мой совет остается в силе. Создайте военный файл, установите Tomcat и разверните там военный файл. Развернуть военный файл так же просто, как скопировать его в папку webapps. Вот шаги, которые вам необходимо выполнить:

  • Установить Томкэт
  • Интегрируйте Tomcat с IIS с помощью подключаемого модуля ISAPI (я могу помочь, если вам нужна дополнительная информация по этому вопросу)
  • Создайте файл WAR (среда IDE Netbeans может сделать это за вас)
  • Скопируйте файл WAR в папку веб-приложений Tomcat.

Если вы все еще не хотите использовать файлы WAR, посмотрите этот место блога. В нем описывается, как вы можете запустить RoR с IIS. Я считаю, что для JRuby процедура будет точно такой же. В любом случае, подход CGI - единственный способ избежать файлов WAR.

person kgiannakakis    schedule 06.07.2009
comment
Да, важно отметить, что jRuby компилируется в байт-код Java. Так что, если я не ошибаюсь, все, что вам нужно, это контейнер сервлетов Java с соответствующими военными файлами jRuby. - person James McMahon; 21.07.2009