Nailgun模式下JRuby 1.7上的Rails应用程序无法启动
我在RVM中安装了JRuby 1.7.2,创建了一个gemset,执行了bundle install。 现在,我运行这个:
第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的情况下启动应用程序,它可以正常工作。 有什么问题? 捆绑?
防火墙当然是禁用的。
一个Nailgun服务器
可以为rails生成binstub …
$ bundle binstubs rails
…并编辑它以设置JRUBY_OPTS。
ENV['JRUBY_OPTS'] = '--1.9 --ng --nailgun-port 2113' load Gem.bin_path('rails', 'rails')
这样,只有客户端的bundler-wrapped部分才能在bundler-wrapped 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
两个Nailgun服务器
理论上可以使用第二个“非捆绑执行”服务器。 为了避免显式重启但允许查杀(通过两次Ctrl-C按下)我建议这个循环:
$ while sleep 1; do jruby --ng-server 2112; done
必须在外部客户端中指定第二个nailgun实例的端口:
$ JRUBY_OPTS='--1.9 --ng --nailgun-port 2112' bin/rails s
我没有看到性能改进,并且“错误”控制台中出现的输出很烦人。 但也许这在其他系统上更快。 而其他人可能会看到改善这种方法的方法?
- JRuby:import vs include vs java_import vs include_class
- 从公司防火墙后面安装gem
- 如何使用JRuby 1.7运行Ruby 2.0?
- 如何在Postgres-compat模式下使用H2作为嵌入式数据库,来自jruby / rails
- 你如何为高吞吐量multithreadingRails应用选择gem?
- 使用Puma运行JRuby与最新的核磁共振成像仍然有好处吗?
- 理解Ruby的repeated_permutation方法的源代码
- 错误:私有方法`gsub’调用nil:NilClass与pik install ruby 1.9.3
- JRuby / Windows和(本机)扩展如何区分它们?