Sinatra在运行Ruby应用程序时无法加载

3

我想运行一个需要Sinatra的Ruby应用程序,运行环境是Ubuntu 10.10。由于对这三个技术都不熟悉,所以如果这个问题看起来很愚蠢,请理解。

昨天我通过以下命令安装了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时,什么也没有发生(Ruby已经正确安装,因为我尝试运行不需要Sinatra的应用程序,它们可以正常工作)。
$ ls
app.rb
$ 
$ ruby1.9.1 app.rb
$
$ ruby1.9.1 -rubygems app.rb
$ 

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

我已经在网上寻求帮助,并阅读了这个论坛中创建的几个主题,但是我尝试过的所有方法都没有成功。

这里可能发生了什么?

谢谢


你具体得到了什么?你运行了那个命令,却什么都没有发生? - Mike Lewis
@Mike Lewis:我什么也没有得到。我复制的输出就是我收到的全部内容。 - Alejandro Riedel
@Mike:据我所知,虽然了解不是很深入,但安装过程没有出现任何问题。为了验证,我执行了以下操作...$ sudo gem install sinatra 成功安装 sinatra-1.2.3 已安装 1 个 gem 正在安装 sinatra-1.2.3 的 ri 文档... 正在安装 sinatra-1.2.3 的 RDoc 文档... $ ruby1.9.1 app.rb $ - Alejandro Riedel
@Phrogz:谢谢。我已经了解过这个问题,但我还是把它加入到代码中,以免犯新手错误。 - Alejandro Riedel
1
在 Ruby 1.9.2 上使用 Sinatra 1.0 时也曾出现过类似的问题。当时的解决方法是在代码中添加 enable :run,你可以尝试一下这个方法(我无法编译 1.9.1 版本来测试)。 - matt
显示剩余6条评论
1个回答

6
在Ruby 1.9.2上使用Sinatra 1.0也存在类似的问题。解决方法是在代码中添加 enable :run。请查看配置文档,如果你将要部署到服务器上,你需要像这样做: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软件包实际上提供了Ruby 1.9.2。因此,运行文件时未设置:run的原因可能是其他问题引起的,尽管我不知道具体是什么问题。另一个更新:查看Ubuntu Sinatra软件包,它似乎是版本1.0。这可能说明您的设置正在使用Ubuntu软件包,并忽略通过rubygems安装的更高版本。如果是这样,那么这不是像我之前建议的Ruby 1.9和Sinatra 1.0中的“类似问题”,而是同样的问题!
我想到了一些事情。您可以通过像 require 'sinatra'之后使用 puts Sinatra :: VERSION 这样的方法来检查您实际使用的Sinatra版本。此外,看起来有一个与ruby1.9.1对应的gem1.9.1命令。看起来当您使用sudo gem install sinatra安装sinatra时,最新版本被安装到了ruby 1.8中,并留下了Ubuntu打包的Sinatra 1.0。如果您还没有切换到rvm,您可以尝试使用sudo gem1.9.1 install sinatra

再次感谢!正如我之前所说,你的解决方案运行良好。我现在正在阅读有关rvm的内容,它似乎非常有用。也感谢你为此提供的帮助... - Alejandro Riedel
@Menfiesto 我不知道我的编辑是否会在你的收件箱中收到通知。如果没有,这条评论只是为了引起你的注意。 - matt
再次感谢。你给我的这些信息对我处理其他宝石非常有用。 - Alejandro Riedel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接