1

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

似乎辅助方法仅在代码块之外工作,但在代码块内失败。我做错了什么,还是书中的错误?

4

2 回答 2

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 方法采用设置名称和值并在应用程序上创建一个属性。可以通过设置对象在请求中访问设置...

于 2013-08-14T17:55:46.510 回答
0

如果development?模块化应用程序失败,您可以使用:

Sinatra::Base.environment == :development

对于经典的 Sinatra 应用程序,您可以使用:

Sinatra::Application.environment == :development

我从Sinatra Google 小组中了解到这一点。

此外,base.rb定义了这样的方法:

def development?; environment == :development end
def production?;  environment == :production  end
def test?;        environment == :test        end
于 2015-03-21T10:08:21.920 回答