10

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

第 1 学期:

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

第 2 学期:

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

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

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

防火墙当然是禁用的。

4

1 回答 1

1

一台钉枪服务器

可以为 rails 生成 binstub ...</p>

$ bundle binstubs rails

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

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

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

由于 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

两个钉枪服务器

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

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

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

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

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

于 2013-07-31T19:32:01.020 回答