我在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/