我正在阅读一本很棒的书“Jump-start Sinatra”并运行书中的所有例子。所有代码示例都运行良好,直到我到达第67页。此代码失败并显示错误消息“NoMethodError at / environment”:
get '/environment' do
if development?
"development"
elsif production?
"production"
elsif test?
"test"
else
"Who knows what environment you're in!"
end
end
似乎辅助方法只能在代码块之外工作,但在代码块中失败。我做错了什么,或者这本书是错误的?
答案 0 :(得分:2)
这些都适合我:
/app.rb:
...
helpers do
def development?
true
end
end
get "/environment" do
if development?
puts "dev"
else
puts "not dev"
end
end
或者,
/app.rb
...
module MyHelpers
def development?
true
end
end
helpers MyHelpers
get "/environment" do
if development?
puts "dev"
else
puts "not dev"
end
end
对评论的回应:
这样称呼:
settings.development?
请参阅此处的“环境”部分:http://www.sinatrarb.com/intro.html#Environments
此处有关settings
对象的信息:http://www.sinatrarb.com/configuration.html
Sinatra包含许多内置设置,用于控制是否启用某些功能。设置是应用程序级别的 使用set,enable或disable之一修改的变量 方法,并通过设置在请求上下文中可用 宾语。应用程序可以自由设置自定义设置以及 默认情况下,框架提供的内置设置。
使用set,enable和disable以最简单的形式设置set方法 获取设置名称和值并在其上创建属性 应用。 可以通过以下方式在请求中访问设置 设置对象......
答案 1 :(得分:0)
如果development?
在模块化应用中失败,您可以使用:
Sinatra::Base.environment == :development
对于经典的Sinatra应用程序,您可以使用:
Sinatra::Application.environment == :development
我是从Sinatra Google group了解到的。
此外,base.rb定义了这样的方法:
def development?; environment == :development end
def production?; environment == :production end
def test?; environment == :test end