ruby-on-rails – 在Nailgun模式的JRuby 1.7上的Rails应用程序不会启动

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 在Nailgun模式的JRuby 1.7上的Rails应用程序不会启动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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

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

猜你在找的Ruby相关文章