【问题标题】:Rails app on JRuby 1.7 in Nailgun mode does not startNailgun 模式下 JRuby 1.7 上的 Rails 应用程序无法启动
【发布时间】:2013-01-08 11:10:36
【问题描述】:

我在 RVM 中安装了 JRuby 1.7.2,创建了一个 gemset,执行了捆绑安装。现在,我运行这个:

第一学期:

[lzap@lzapx my_app]$ bundle exec jruby --ng-serv
NGServer started on all interfaces, port 2113.

第二学期:

[lzap@lzapx my_app]$ JRUBY_OPTS="--1.9 --ng" bundle exec rails s

问题是什么都没有发生,终端不打印任何东西,它只是永远挂起。顶部没有显示任何 java/jruby 进程正在工作。

如果我尝试在没有 --ng 的情况下启动应用程序,它可以正常工作。问题是什么?捆绑器?

防火墙当然是禁用的。

【问题讨论】:

  • Rails 的哪个版本?
  • ruby -v 说什么?
  • 它是否与 WEBrick 一起运行
  • 当然可以。 JRuby 是 1.7.2... 尝试了最新的稳定版,没有运气。

标签: ruby-on-rails jruby nailgun


【解决方案1】:

一个钉枪服务器

可以为 rails 生成 binstub ...

$ bundle binstubs rails

...并对其进行编辑以设置 JRUBY_OPTS。

ENV['JRUBY_OPTS'] = '--1.9 --ng --nailgun-port 2113'
load Gem.bin_path('rails', 'rails')

这种方式只有客户端的捆绑器包装部分在捆绑器包装的钉枪服务器中执行。

由于 nailgun 不传播信号,您可能需要使用控制器来阻止它:

class RailsController < ApplicationController
  def stop
    Process.kill :INT, 0
  end
end

基准测试:

$ time bin/rails -v  # modified
Rails 3.0.11

real    0m3.737s
user    0m6.579s
sys     0m0.223s

$ time bin/rails -v  # unmodified
Rails 3.0.11

real    0m5.547s
user    0m12.739s
sys     0m0.411s

$ time bundle exec rails -v
Rails 3.0.11

real    0m9.145s
user    0m20.708s
sys     0m0.682s

两个 Nailgun 服务器

理论上可以使用第二个“非捆绑执行”服务器。为避免显式重启但允许杀死(按两次 Ctrl-C),我建议使用此循环:

$ while sleep 1; do jruby --ng-server 2112; done

第二个 nailgun 实例的端口必须在外部客户端中指定:

$ JRUBY_OPTS='--1.9 --ng --nailgun-port 2112' bin/rails s

我没有看到性能改进,并且出现在“错误”控制台中的输出很烦人。但也许这在其他系统上更快。其他人可能会看到改进这种方法的方法?

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 2012-08-27
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2023-03-22
    相关资源
    最近更新 更多