运行ruby应用程序时,Sinatra不会加载

时间:2011-04-21 20:46:43

标签: ruby rubygems sinatra

我正在尝试在Ubuntu 10.10中运行需要Sinatra的Ruby应用程序。我是这些技术中的新技术的新手,所以我理解这个问题对你来说是否显得愚蠢。

昨天我安装了红宝石做...     sudo apt-get install ruby1.9.1-full

和sinatra做......     sudo gem install sinatra

这是我正在尝试运行的代码:

require 'rubygems'
require 'sinatra'

get '/' do
    "Hi Alex!"
end

当我ruby1.9.1 -rubygems app.rb没有任何反应时(因为我尝试运行不需要sinatra的应用程序并且它们正常工作,所以Ruby已正确安装)。

$ ls
app.rb
$ 
$ ruby1.9.1 app.rb
$
$ ruby1.9.1 -rubygems app.rb
$ 

我知道它应该打开Sinatra并告诉我它正在听哪个端口。

我一直在寻找网上的帮助并阅读本论坛中创建的几个主题,但我尝试过的任何内容都没有为我做好。

这里可能会发生什么?

由于

1 个答案:

答案 0 :(得分:6)

在ruby 1.9.2上有关于sinatra 1.0的类似问题。答案是将enable :run添加到您的代码中。

查看docs for the :run configuration - 如果您要部署到服务器,则需要执行enable :run if __FILE__ == $0之类的操作,以便在开发期间只启动内置服务器当你需要的时候。

严格地说你的代码是正确的,应该运行正常,事实上它与ruby 1.8.7和1.9.2一样。 问题似乎是用ruby 1.9.1运行它。一般情况下,1.9.1似乎已经过时了,如果可以,你可能应该升级到1.9.2。如果Ubuntu没有1.9.2的任何软件包,请查看rvm(事实上,如果你要做ruby开发rvm,无论如何都值得一看)。


更新

我设法将ruby 1.9.1编译为测试这个,你的代码工作正常。还有一点谷歌搜索表明Ubuntu ruby1.9.1 package provides ruby 1.9.2 anyway。因此,在直接运行文件时,似乎还有其他因素导致:run无法设置,但我不知道那可能是什么。

另一个更新:

查看Ubuntu Sinatra package,看起来它的版本是1.0。可能是您的设置正在使用Ubuntu 打包并忽略通过rubygems安装的最新版本。这可以解释发生了什么。如果是这样,这不是像我上面提到的ruby 1.9和sinatra 1.0那样的“类似问题”,那也是同样的问题!

又一次更新:

我发生了一些事情。您可以在puts Sinatra::VERSION之后查看require 'sinatra'之类的实际使用的Sinatra版本。此外,它看起来像there is a gem1.9.1 command,对应ruby1.9.1。看起来当你用sudo gem install sinatra安装sinatra时,最新版本安装到ruby 1.8安装中,并使用Ubuntu打包的Sinatra 1.0保留了ruby 1.9。如果您还没有切换到rvm,可以试试sudo gem1.9.1 install sinatra