我在RVM中安装了J
Ruby 1.7.2,创建了一个gemset,执行了bundle安装.现在,我运行这个:
期限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
问题没有发生,终端不要打印任何东西,它只是永远挂起来.顶部不显示任何java / jruby进程工作.
如果我尝试启动没有–ng的应用程序,它可以正常工作.有什么问题?捆绑?
防火墙当然是禁用的.
解决方法
一个指甲服务器
可以为rails生成binstub …
$bundle binstubs rails
…并编辑它以设置JRUBY_OPTS.
ENV['JRUBY_OPTS'] = '--1.9 --ng --nailgun-port 2113' load Gem.bin_path('rails','rails')
这样,只有捆绑包裹的客户端部分在捆绑包裹的指甲枪服务器中执行.
由于指甲枪不传播信号,您可能希望使用控制器来阻止它:
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
第二个甲形枪实例的端口必须在外部客户端中指定:
$JRUBY_OPTS='--1.9 --ng --nailgun-port 2112' bin/rails s
我没有看到性能提升,出现在“错误”控制台中的输出是令人讨厌的.但也许这在其他系统上更快.还有其他人可能会看到改进这种方法的方法?