我最近尝试设置Amazon EC2实例来运行Rails和Sinatra应用程序。问题 - Sinatra将无法启动。当我尝试运行.rb文件时,会抛出类似这样的内容:
$ ruby hello.rb
/usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1144:in `define_method': tried to create Proc object without a block (ArgumentError)
from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1144:in `compile!'
from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1129:in `route'
from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1111:in `get'
from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1474:in `send'
from /usr/local/rvm/gems/ruby-1.8.7-p334/gems/sinatra-1.2.5/lib/sinatra/base.rb:1474:in `get'
from hello.rb:4
现在,我最初认为这是EC2特有的。所以我在我的Mac上设置了RVM并尝试了同样的结果。然后我认为它可能是正在使用的Ruby的特定版本(1.9.2)。事实并非如此 - 即使1.8.7也存在问题。现在,我完全迷失了。以下是我的EC2实例上当前安装的gem列表:
$ gem list
*** LOCAL GEMS ***
abstract (1.0.0)
actionmailer (3.0.7)
actionpack (3.0.7)
activemodel (3.0.7)
activerecord (3.0.7)
activeresource (3.0.7)
activesupport (3.0.7)
arel (2.0.9)
builder (2.1.2)
bundler (1.0.12)
coderay (0.9.7)
erubis (2.6.6)
i18n (0.5.0)
mail (2.2.19)
method_source (0.4.1)
mime-types (1.16)
polyglot (0.3.1)
pry (0.8.3)
rack (1.2.2)
rack-mount (0.6.14)
rack-test (0.5.7)
rails (3.0.7)
railties (3.0.7)
rainbow (1.1.1)
rake (0.8.7)
ruby_parser (2.0.6)
sexp_processor (3.0.5)
sinatra (1.2.5)
slop (1.5.3)
thor (0.14.6)
tilt (1.3)
treetop (1.4.9)
tzinfo (0.3.27)
请让我知道你的想法 - 感谢任何帮助。
答案 0 :(得分:1)
看起来这是sinatra中的一个错误:https://github.com/sinatra/sinatra/issues/258。
作为解决方法,请在新的rvm gemset中尝试以前版本的sinatra:gem install sinatra -v 1.2.3
,或者在gem 'sinatra' '=1.2.3'
行之前使用require sinatra
在文件中指定所需的版本
Sinatra 1.2.5(故障版本)has been yanked and a new version released。任何收到此错误的人现在都可以执行gem update sinatra
并使用更新后的gem。
答案 1 :(得分:0)
这不是RVM问题,因为我在Sinatra中使用它。
这是一些测试代码:
#!/usr/bin/env ruby
require 'sinatra'
get '/hi' do
"Hello World! #{ `rvm -v` }"
end
将其保存为类似test.rb
的内容并执行chmod +x test.rb
以使其可执行。使用which ruby
确认您在RVM的控制下运行Ruby,该~/.rvm
路径将返回./test.rb
路径中的路径。使用>> == Sinatra/1.2.3 has taken the stage on 4567 for development with backup from WEBrick
>> [2011-04-30 14:49:56] INFO WEBrick 1.3.1
>> [2011-04-30 14:49:56] INFO ruby 1.9.2 (2011-02-18) [x86_64-darwin10.6.0]
>> [2011-04-30 14:49:56] INFO WEBrick::HTTPServer#start: pid=3387 port=4567
>> 127.0.0.1 - - [30/Apr/2011 14:50:02] "GET /hi HTTP/1.1" 200 103 0.2499
>> localhost - - [30/Apr/2011:14:50:01 MST] "GET /hi HTTP/1.1" 200 103
>> - -> /hi
>> 127.0.0.1 - - [30/Apr/2011 14:50:02] "GET /favicon.ico HTTP/1.1" 404 441 0.0008
>> localhost - - [30/Apr/2011:14:50:02 MST] "GET /favicon.ico HTTP/1.1" 404 441
>> http://localhost:4567/hi -> /favicon.ico
>>
>> == Sinatra has ended his set (crowd applauds)
>> [2011-04-30 14:50:11] INFO going to shutdown ...
>> [2011-04-30 14:50:11] INFO WEBrick::HTTPServer#start done.
运行代码,您的RVM控制的Ruby将启动它。
控制台出局:
Hello World! rvm 1.6.5 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]
我在浏览器中看到的内容:
get '/hi' do
"<pre>#{ `which ruby` }</pre>"
end
将其更改为:
/Users/greg/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
在我的浏览器中显示:
rvm get head
rvm reload
所以,基本上,我已经在我的系统上运行RVM,而Ruby 1.9.2是当前的Ruby。尝试使用该代码,运行它并查看是否在浏览器中输出。
另请查看您的RVM是否是最新的。它上周涨至1.6.5。如果您目前没有使用:
#!/usr/bin/env ruby
require 'sinatra'
get '/hi' do
"Running using: #{RUBY_VERSION}<br>Ruby in path found at: #{ `which ruby` }"
end
编辑:
进一步测试以显示正在运行的Ruby:将代码更改为:
Running using: 1.9.2
Ruby in path found at: /Users/greg/.rvm/rubies/ruby-1.9.2-p180/bin/ruby
然后运行它。如果您的解释器正在运行系统安装的Ruby on MacOS或者通过apt-get运行Ruby的默认安装,那么您将使用1.8.7。我明白了:
{{1}}