我在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的情况下启动应用程序,则可以正常运行。有什么问题?捆绑器?

当然,防火墙是禁用的。

最佳答案

一台Nailgun服务器

可以为 rails 生成一个垃圾桶……

$ bundle binstubs rails

…并对其进行编辑以设置JRUBY_OPTS。
ENV['JRUBY_OPTS'] = '--1.9 --ng --nailgun-port 2113'
load Gem.bin_path('rails', 'rails')

这样,仅在客户机的捆绑器包装的部分在捆绑器包装的nailgun服务器中执行。

由于nailgun不会传播信号,因此您可能需要使用 Controller 来停止它:
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

我没有看到性能提升,并且出现在“错误”控制台中的输出令人讨厌。但这可能在其他系统上更快。还有其他人可能会看到一种改进此方法的方法吗?

关于ruby-on-rails - Nailgun模式下的JRuby 1.7上的Rails应用程序无法启动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14213679/

10-13 06:04