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 に答える