无法使用 rackup 和 jRuby 启动简单的 Sinatra 应用程序(网络服务器无响应)
Can't launch simple Sinatra app using rackup and jRuby (no response from web server)
我有一个 Sinatra "hello world" 应用程序,我正在尝试 运行 使用 jRuby。它在我 运行 应用程序时有效,但在我 运行 rackup 时无效。谁能告诉我这是怎么回事?
这是应用程序,在文件中 '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 has taken the stage..."
的可疑缺失
好吧,这不足以解释发生了什么,但如果在 config.ru 中我替换
我可以让它工作
run Sinatra::Application
和
Sinatra::Application.run!
事实上,知道这一点让我更加困惑。 Rack 中的某种错误?
当您直接 运行 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。)
我的情况有点类似。
但不同的是,我的 Jruby + Sinatra rackup 应用程序终于开始响应了。
但是很费时间,有时应用启动5分钟后才开始响应。
我发现,应用程序启动端口在一段时间内没有被监听。
如果我们使 netstat -an 它不会显示我们的应用程序端口。
其实我不知道这种行为的原因,但我会挖掘它。
#config.ru
require "./app.rb"
set :bind, '0.0.0.0'
set :port, 9292 #set your port!
Sinatra::Application.run!
尝试此代码并输入 rackup
然后你就可以得到你想要的结果了。
我有一个 Sinatra "hello world" 应用程序,我正在尝试 运行 使用 jRuby。它在我 运行 应用程序时有效,但在我 运行 rackup 时无效。谁能告诉我这是怎么回事?
这是应用程序,在文件中 '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 has taken the stage..."
的可疑缺失好吧,这不足以解释发生了什么,但如果在 config.ru 中我替换
我可以让它工作run Sinatra::Application
和
Sinatra::Application.run!
事实上,知道这一点让我更加困惑。 Rack 中的某种错误?
当您直接 运行 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。)
我的情况有点类似。 但不同的是,我的 Jruby + Sinatra rackup 应用程序终于开始响应了。
但是很费时间,有时应用启动5分钟后才开始响应。 我发现,应用程序启动端口在一段时间内没有被监听。
如果我们使 netstat -an 它不会显示我们的应用程序端口。 其实我不知道这种行为的原因,但我会挖掘它。
#config.ru
require "./app.rb"
set :bind, '0.0.0.0'
set :port, 9292 #set your port!
Sinatra::Application.run!
尝试此代码并输入 rackup
然后你就可以得到你想要的结果了。