运行Sinatra的生产时出错?,测试?和发展?代码块中的方法

时间:2013-08-14 16:37:42

标签: ruby sinatra

我正在阅读一本很棒的书“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

似乎辅助方法只能在代码块之外工作,但在代码块中失败。我做错了什么,或者这本书是错误的?

2 个答案:

答案 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