Приложение Rails на JRuby 1.7 в режиме Nailgun не запускается

Я установил JRuby 1.7.2 в RVM, создал набор гемов, выполнил установку комплекта. Теперь я запускаю это:

Срок 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, оно работает нормально. В чем проблема? Bundler?

Брандмауэр отключен, конечно.

1 ответ

Решение

Один гвоздодер

Можно создать 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

Я не видел улучшения производительности, и вывод, появляющийся в "неправильной" консоли, раздражает. Но, возможно, это быстрее в других системах. И кто-то еще может увидеть способ улучшить этот подход?

Другие вопросы по тегам