我有一个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已经登台......"
答案 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
然后,您可以获得所需的结果。