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

时间:2013-04-07 21:29:09

标签: ruby sinatra

我第一次钻研Ruby和Sinatra,并通过Alan Harris和Konstatin Haase的“Sinatra Up and Running”。在整理出我的Ruby版本(使用RVM)之后,在创建扩展时,我在第3章没有遇到任何问题。代码如下(post_get.rb):

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

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

user@UbuntuOne:~/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>'

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

在错误消息中,导致错误的行如下所示:

get (route, &block)

post (route, &block)

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

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

正在发生的事情是Ruby正在尝试解析括号中包含的内容并将结果作为 only 参数传递给方法,而不是将它们的内容用作参数列表。 / p>