【问题标题】:Instructions for setting up IIS and jRuby设置 IIS 和 jRuby 的说明
【发布时间】:2009-07-06 13:34:06
【问题描述】:

有没有人有关于设置 jRuby 以使用 IIS 的明确说明。

编辑:

我正在寻找的是使用 IIS 和 jRuby 让 Ruby on Rails 应用程序在 Windows 上运行的分步说明。原因是因为在野外提出问题时,除了“使用 Linux”之外,我找不到其他任何东西。对于大多数人来说,Windows 是主要的开发和部署环境,因此使用基于 Linux 的服务器是不可能的。 IIS 也包含在 Windows 中,并提供与 Active Directory 的出色集成,因此也不可能使用 Apache。

最后一件事是使用 war 文件是一场噩梦,请提供有关如何通过仅复制文件或其他任何方式部署 rails 应用程序的说明,然后再使用 war 文件。

【问题讨论】:

  • 我认为你试图避免战争文件是错误的方式。如果您花一些时间了解战争文件而不是尝试绕过它们,从长远来看,这会容易得多。
  • 我已经大幅更新了我的答案,展示了 JRuby 和 IIS 的分步演练,没有 WARS :-)
  • 我更新了演练,展示了使用 Warbler 创建战争,并通过 IIS 在 Glassfish 上运行 JRuby/Rails 应用程序。享受:-)

标签: ruby-on-rails iis jruby


【解决方案1】:

它实际上只是您想在 IIS 上部署的 Rails 应用程序,还是必须是 JRuby?如果它只是 Ruby on Rails 而不是 JRuby,那么 here is your step-by-step guide。但是,如果您想使用 IIS 是 JRuby,那就别无所求。以下是我遵循的步骤;我的环境是 Windows 7 RC 上的 IIS7,Java 1.6.0_13。

  1. 首先,我从http://dist.codehaus.org/jruby/1.3.1/jruby-bin-1.3.1.tar.gz下载了JRuby。
  2. 然后我将存档解压缩到C:\JRuby
  3. 我将环境变量 JRUBY_HOME 设置为 c:\JRuby\jruby-1.3.1
  4. 我在路径中添加了%JRUBY_HOME%\bin

我将在接下来的步骤中穿插屏幕抓取。

让我们运行jruby来确认安装成功:

C:\用户\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 限制 openssl 加载。 gem install jruby-openssl 以获得全面支持。 http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL 成功安装activerecord-2.3.3 成功安装 rack-1.0.0 成功安装actionpack-2.3.3 成功安装actionmailer-2.3.3 成功安装activeresource-2.3.3 成功安装rails-2.3.3 安装了 6 个宝石 为 activerecord-2.3.3 安装 ri 文档... 正在为 rack-1.0.0 安装 ri 文档... 正在为 actionpack-2.3.3 安装 ri 文档... 为 actionmailer-2.3.3 安装 ri 文档... 为 activeresource-2.3.3 安装 ri 文档... 正在为 rails-2.3.3 安装 ri 文档...

让我们创建一个名为 jror 的 Rails 应用程序:

C:\Users\Vinay\Projects>rails new jror 创造 创建应用程序/控制器 创建应用程序/助手 创建应用程序/模型 创建应用程序/视图/布局 创建配置/环境 创建配置/初始化程序 创建配置/语言环境 创建数据库 创建文档 创建库 创建库/任务 创建日志 创建公共/图像 创建公共/javascripts 创建公共/样式表 创建脚本/性能 创建测试/夹具 创建测试/功能 创建测试/集成 创建测试/性能 创建测试/单元 创建供应商 创建供应商/插件 创建 tmp/会话 创建 tmp/sockets 创建 tmp/缓存 创建 tmp/pids 创建耙文件 创建自述文件 创建应用程序/控制器/application_controller.rb 创建 app/helpers/application_helper.rb 创建 config/database.yml 创建 config/routes.rb 创建 config/locales/en.yml 创建 config/initializers/backtrace_silencers.rb 创建 config/initializers/inflections.rb 创建 config/initializers/mime_types.rb 创建 config/initializers/new_rails_defaults.rb 创建 config/initializers/session_store.rb 创建 config/environment.rb 创建配置/boot.rb 创建 config/environments/production.rb 创建 config/environments/development.rb 创建配置/环境/test.rb 创建脚本/关于 创建脚本/控制台 创建脚本/dbconsole 创建脚本/销毁 创建脚本/生成 创建脚本/运行器 创建脚本/服务器 创建脚本/插件 创建脚本/性能/基准 创建脚本/性能/分析器 创建 test/test_helper.rb 创建测试/性能/browsing_test.rb 创建 public/404.html 创建 public/422.html 创建 public/500.html 创建 public/index.html 创建公共/favicon.ico 创建 public/robots.txt 创建 public/images/rails.png 创建 public/javascripts/prototype.js 创建 public/javascripts/effects.js 创建 public/javascripts/dragdrop.js 创建公共/javascripts/controls.js 创建 public/javascripts/application.js 创建文档/README_FOR_APP 创建日志/server.log 创建日志/production.log 创建日志/development.log 创建日志/test.log

让我们运行WEBrick 以确保一切按预期工作:

C:\Users\Vinay\Projects\jror>jruby 脚本/服务器 => 启动 WEBrick => Rails 2.3.3 应用程序从 http://0.0.0.0:3000 开始 JRuby 限制 openssl 加载。 gem install jruby-openssl 以获得全面支持。 http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL => 使用 -d 调用以分离 => Ctrl-C 关闭服务器 [2009-07-21 17:51:21] INFO WEBrick 1.3.1 [2009-07-21 17:51:21] 信息 ruby​​ 1.8.6 (2009-06-15) [java] [2009-07-21 17:51:21] 信息 WEBrick::HTTPServer#start: pid=2440 端口=3000

导航到 http://localhost:3000/ 并确认您的 Rails 应用程序出现。

果然来了。

接下来要建立一种机制,将向 IIS 发出的选定请求代理到 JRuby。为此,需要 URL 重写器/反向代理。我为此使用了ISAPI Rewrite 3。您可以选择使用不同的工具(例如,Microsoft ISA)。 ISAPI Rewrite 3 物超所值,每台服务器 99 美元,试用期为 45 天。

对于ISAPI Rewrite 3,我设置httpd.conf配置文件如下:

重写引擎开启 RewriteBase / 重写日志“C:\temp\rewrite.log” RewriteLogLevel 9 RewriteProxy jror/(.*) http://localhost:3000/$1

这会代理表单的 URL

http://localhost/jror/abc123

http://localhost:3000/abc123

所以现在,我们可以导航到 http://localhost/jror/ 并查看 JRuby 通过 IIS 处理的请求:

猜猜看:没有战争!对 Rails 应用的任何更改都应直接通过。

这是我的 Firebug 控制台的屏幕截图,显示了该页面的响应标头:

当然,这更像是一种开发设置而不是生产设置 - 但对于生产用途,您可能需要使用可用于生产的应用服务器,例如 Glassfish,这将需要使用那些讨厌的战争 ;-)

如果您确实想使用 war 部署到 Java 应用服务器,您可以使用 Warbler 轻松将您的应用打包到一个战争中。

要在 Glassfish V3 上运行,需要执行一些额外的步骤。部署和运行 Rails 应用程序的最快方法是使用 GlassFish gem,它仅包含 GlassFish v3 内核 (Grizzly) 和一些实用程序,因此提供了最小膨胀设置。让我们安装 gem:

C:\Users\Vinay\Projects\jror>gem install glassfish JRuby 限制 openssl 加载。 gem install jruby-openssl 以获得全面支持。 http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL 成功安装 glassfish-0.9.5-universal-java 已安装 1 个宝石 为 glassfish-0.9.5-universal-java 安装 ri 文档... 为 glassfish-0.9.5-universal-java 安装 RDoc 文档...

在 Glassfish 上运行 Rails 应用:

C:\Users\Vinay\Projects>glassfish jror 在开发环境中启动 GlassFish 服务器:192.168.0.17:3000... 将日志消息写入:jror/log/development.log。 按 Ctrl+C 停止。

如您所见,您在 Glassfish 上运行,但仍然不需要战争!除了(在我的设置中的 httpd.conf 中)将代理更改为指向 Glassfish 服务器使用的 IP 地址和端口之外,无需在 IIS 端进行任何更改。如果您想全力以赴并安装完整的 Glassfish 服务器并在其上运行 Rails 应用程序,您不妨关注 Glassfish 团队的these instructions。它们包括安装和运行 Glassfish、服务器、部署和取消部署 Rails 应用程序以及在生产模式下运行应用程序。

这是为完整 Glassfish 服务器创建战争文件所需的内容。

安装莺:

C:\Users\Vinay\Projects>gem 安装莺 JRuby 限制 openssl 加载。 gem install jruby-openssl 以获得全面支持。 http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL 成功安装warbler-0.9.13 已安装 1 个宝石 为 warbler-0.9.13 安装 ri 文档... 为 warbler-0.9.13 安装 RDoc 文档...

运行莺:

C:\Users\Vinay\Projects\jror>warble mkdir -p tmp/war/WEB-INF/gems/规范 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 战争/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 规范 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 战争/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/product 离子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 选项.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/战争/图像 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/样式表 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 驱动器 C 中的卷没有标签。 卷序列号为 0C8D-1418 C:\Users\Vinay\Projects\jror 目录 22/07/2009 15:55 13,180,634 jror.war 1 个文件 13,180,634 字节 0 Dir(s) 7,730,462,720 字节空闲

呼!

【讨论】:

  • 好的。我会忘记战争文件的事情。如果您发布使用 glassfish 将 jruby 连接到 iis 的说明,我会接受您的回答并给您赏金。抱歉,我对此感到非常痛苦,但我想要一个地方让人们可以在一个地方找到这些说明。
  • 只有我认为这个答案证明了 SO 的赏金系统真的有效吗?想象一下,您需要付多少钱才能获得这种级别的信息?
  • 实际上,Dan,碰巧我不得不为另一个项目进行类似的设置(尽管不是使用 Glassfish)。诚然,我在这个答案上做了一些努力,但这也是为了我自己将来的参考。我很容易在不涉及赏金的人们的博客上找到这种级别的信息,毫无疑问,有赏金是件好事。但不值得花时间只是为了赏金。
  • 确保 JAVA_HOME 也在你的路径中,否则在尝试运行 jruby 时会得到“系统找不到指定的路径”
  • 要确保的另一件事是安装了 sqlite gem,否则您将在您的尾巴中出现错误。安装 Rails 后立即发出此命令:jruby -S gem install activerecord-jdbcsqlite3-adapter
【解决方案2】:

您需要先安装 Tomcat。请参阅此how-to 以将 Tomcat 与 IIS 一起设置。

使用 JRuby,您将构建 WAR 文件。只需将它们放入 Tomcat 的 webapps 文件夹中即可。

更新:好的,您需要集成两种本来不应该一起使用的技术:IIS 和 JRuby。好消息是 JRuby 既是 Java 又是 Ruby,您可以使用两者中最好的。使用 Ruby 编写代码效率更高、更有趣,但 Java 更适合部署(尤其是在需要使用 IIS 时)。所以我的建议仍然成立。创建一个war文件,安装Tomcat并在那里部署war文件。部署 war 文件就像将它复制到 webapps 文件夹中一样简单。以下是您需要遵循的步骤:

  • 安装 Tomcat
  • 使用 ISAPI 插件将 Tomcat 与 IIS 集成(如果您需要这方面的更多信息,我可以提供帮助)
  • 创建一个 WAR 文件(Netbeans IDE 可以为您完成)
  • 将WAR文件复制到Tomcat的webapps文件夹中

如果您仍然不想使用 WAR 文件,请查看blog spot。它描述了如何使用 IIS 运行 RoR。我相信对于 JRuby 来说,这个过程是一样的。无论如何,如果您想避免使用 WAR 文件,CGI 方法是唯一的方法。

【讨论】:

  • 是的,需要注意的重要一点是 jRuby 编译为 Java 字节码。因此,除非我弄错了,否则您只需要一个带有适当 jRuby 战争文件的 Java servlet 容器。
猜你喜欢
  • 2017-12-18
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多