尝试创建第一个Sinatra扩展时出现错误

问题描述:

我正在第一次钻研Ruby和Sinatra,并穿过Alan Harris和Konstatin Haase的“Sinatra Up and Running”。在对我的Ruby版本进行分类(使用RVM)之后,创建扩展时,我没有遇到第3章中的任何问题。代码如下(post_get.rb):尝试创建第一个Sinatra扩展时出现错误

require 'sinatra/base' 

module Sinatra 
    module PostGet 
    def post_get (route, &block) 
     get (route, &block) 
     post (route, &block) 
    end 
    end 

    register PostGet 
end 

与(post_get_test.rb)用于:

require 'sinatra' 
require './post_get' 

post_get '/' do 
     "Hello #{params[:names]}" 
end 

但是,每当我跑 “红宝石post_get_test.rb” 我得到以下运行时错误立即:

[email protected]:~/sinatra$ ruby post_get_test.rb 
/home/user/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': /home/user/sinatra/post_get.rb:6: syntax error, unexpected ',', expecting ')' (SyntaxError) 
     get (route, &block) 
       ^
/home/user/sinatra/post_get.rb:7: syntax error, unexpected ',', expecting ')' 
     post (route, &block) 
       ^
/home/user/sinatra/post_get.rb:13: syntax error, unexpected $end, expecting keyword_end 
    from /home/user/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from post_get_test.rb:2:in `<main>' 

我不太清楚,即使从哪里开始整理出来。有人能指出我正确的方向来解决这个问题吗?

谢谢。

您发布的代码是正确的,但与错误消息中报告的代码不同。

在错误消息导致错误看起来就像这样的线:

get (route, &block) 

post (route, &block) 

注意getpost和开口(之间的空间。在Ruby中,当调用方法并使用括号时,方法名称和左括号之间不得有空格(如问题中的代码块)。

请确保在您的实际代码中此处没有空格,您应该没问题。

发生了什么事是红宝石试图解析什么是包含在括号,并将结果传递作为参数的方法,而不是利用他们的内容作为参数列表。

+0

在第一个代码块中复制时我有点sl but,但我已经编辑它以显示正确的空白区域。我已经改变了一点空白空间,但是我所做的一切似乎都不会影响我收到的错误消息。 – rsgoheen 2013-04-08 07:03:49

+0

就是这样。我没有意识到Ruby对这种空白非常敏感。谢谢。 – rsgoheen 2013-04-08 17:10:52