2015-01-12 2 views
9

У меня есть приложение «привет мир» Sinatra, которое я пытаюсь запустить с помощью jRuby. Он работает, когда я запускаю приложение, но не тогда, когда я запускаю rawn. Может ли кто-нибудь сказать мне, что здесь происходит?Не удается запустить простую программу Sinatra с помощью rawn и jRuby (без ответа с веб-сервера)

Вот приложение, в файле 'app.rb':

require 'rubygems' 
require 'bundler/setup' 
require 'sinatra' 

configure do 
    set :bind, '0.0.0.0' 
end 

get '/' do 
    'Boo!' 
end 

Я могу запустить это с помощью bundle exec ruby app.rb и она отлично работает:

[email protected][~/andy/sinatra_sand_jruby]%: bundle exec ruby app.rb 
[2015-01-12 10:36:06] INFO WEBrick 1.3.1 
[2015-01-12 10:36:06] INFO ruby 1.9.3 (2014-12-09) [java] 
== Sinatra/1.4.5 has taken the stage on 4567 for development with backup from WEBrick 
[2015-01-12 10:36:06] INFO WEBrick::HTTPServer#start: pid=31654 port=4567 

Вот мой config.ru позвонить выше программы:

require 'rubygems' 
require 'bundler/setup' 
require 'sinatra' 
require './app' 

run Sinatra::Application 

Если я запускаю это, кажется, работает, но я не могу получить доступ к USI сервера нг веб-браузер:

[email protected][~/andy/sinatra_sand_jruby]%: bundle exec rackup -p4567 
[2015-01-12 10:29:06] INFO WEBrick 1.3.1 
[2015-01-12 10:29:06] INFO ruby 1.9.3 (2014-12-09) [java] 
[2015-01-12 10:29:06] INFO WEBrick::HTTPServer#start: pid=31553 port=4567 

выделю подозрительное отсутствие «Синатра взял на сцену ...»

+0

Где ваш файл config.ru? –

+0

@ Sirl33tname - в том же каталоге, что и файл app.rb. И вот откуда я запускаю обе команды. –

ответ

1

Ну, это вряд ли достаточно, чтобы объяснить, что происходит, но я могу это сделать работать, если в config.ru я заменяю

run Sinatra::Application 

с

Sinatra::Application.run! 

в самом деле, зная, что заставляет меня еще больше гр onfused. Какая-то ошибка в стойке?

18

При запуске файла Ruby напрямую (или когда вы добавляете Sinatra.run! в файл config.ru) Sinatra запускает собственный сервер. В этом случае вступит в силу вызов set: bind, '0.0.0.0'. Когда вы запускаете rackup, этот параметр игнорируется.

Хост по умолчанию rackup listens to is localhost, поэтому сервер будет доступен только через тот же компьютер, вы не сможете получить к нему доступ с других компьютеров. Для того, чтобы получить доступ к нему через другие машины установить --host вариант:

bundle exec rackup -p4567 --host 0.0.0.0 

(Примечание выход rackup -h для текущей версии говорит хост по умолчанию 0.0.0.0, но это устарело и было fixed in master.)

+0

Это хорошая теория, но она явно не объясняет неудачу в jRuby. Я должен был объяснить, что это работает под MSI Ruby. –

+0

@ AndyJones, какие версии стойки вы используете под МРТ и JRuby?Если у вас более старая версия на МРТ, это объясняет разницу. Изменение только для прослушивания localhost происходит только в стойке 1.6+. – matt

+0

Ruby 1.9.3, Rack 1.6.0 Боюсь. Я вернусь в MSI завтра, чтобы убедиться, что это все еще работает, хотя, спасибо. –

1

У меня немного похожая ситуация. Но разница в том, что мое приложение для начинающих Jruby + Sinatra наконец-то начинает отвечать.

Но это занимает много времени, иногда оно начинает отвечать через 5 минут после запуска приложения. Я узнал, что после запуска приложения порт не прослушивается в течение некоторого периода времени.

Если мы сделаем netstat -an, он не покажет наш порт приложения. На самом деле я не знаю причины такого поведения, но я буду копать его.

+0

Имея аналогичную проблему, вы когда-нибудь ее выясняли? –

+0

После обновления до jruby-9000 он ушел. Не знаю, в чем был корень проблемы. –