无法使用rackup和jRuby启动简单的Sinatra应用程序(Web服务器无响应)

时间:2015-01-12 10:24:17

标签: ruby sinatra jruby rackup

我有一个Sinatra"你好世界"我试图使用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来运行它,它运行正常:

jonea@centos7andy[~/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

如果我运行它,它似乎工作,但我无法使用网络浏览器访问服务器:

jonea@centos7andy[~/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

我注意到可疑的缺乏" Sinatra已经登台......"

4 个答案:

答案 0 :(得分:28)

当您直接运行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。)

答案 1 :(得分:1)

嗯,这几乎不足以解释发生了什么,但如果在config.ru中我可以使它工作我替换

run Sinatra::Application

Sinatra::Application.run!

事实上,知道这让我更加困惑。 Rack中的某种bug?

答案 2 :(得分:1)

我的情况略有相似。 但不同的是,我的Jruby + Sinatra机架式应用终于开始响应了。

但它需要很多时间,有时它会在应用程序启动后5分钟开始响应。 我发现,在应用程序启动端口后没有收听一段时间。

如果我们制作netstat -an,它将不会显示我们的应用程序端口。 其实我不知道这种行为的原因,但我会去挖掘它。

答案 3 :(得分:1)

#config.ru
require "./app.rb"

set :bind, '0.0.0.0'
set :port, 9292 #set your port!
Sinatra::Application.run!

尝试此代码,然后输入rackup

然后,您可以获得所需的结果。