10

JRuby 1.7.2 を RVM にインストールし、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

問題は何も起こらないことです.両側の端末は何も印刷せず、永遠にハングアップします. 上には、Java/jruby プロセスが動作していることは示されていません。

--ng なしでアプリケーションを起動しようとすると、問題なく動作します。どうした?バンドラー?

ファイアウォールはもちろん無効です。

4

1 に答える 1

1

ネイルガン サーバー 1 台

レール用の binstub を生成することは可能です...</p>

$ 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

2 つのネイルガン サーバー

2 番目の「非バンドル実行」サーバーは、理論上は使用できます。明示的な再起動を回避し、強制終了を許可するには (Ctrl-C を 2 回押す)、次のループをお勧めします。

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

外部クライアントで 2 番目の nailgun インスタンスのポートを指定する必要があります。

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

パフォーマンスの向上は見られず、「間違った」コンソールに出力が表示されるのは面倒です。しかし、おそらくこれは他のシステムではより高速です。そして、他の誰かがこのアプローチを改善する方法を見るかもしれませんか?

于 2013-07-31T19:32:01.020 に答える