2

(私はRailsを使用していません)

渡された環境を次のように設定するrakeタスクがあります。

rake some:task ENV=test

私の仕事は:

  desc "environment"
  task :environment do
    env = ENV['ENV'] || 'development'
  end

今、私が次のようなタスクを持っている場合:

 desc "t1"
  task :t1 [:environment] do
    puts env
  end

envが不明であると言って失敗しますが、それはなぜですか?

私はルビーのダイナミックな性質がこれを行うだろうと思いました:

環境タスクを実行すると、env変数が作成されます。これは依存関係であるため、その変数は他のタスクの範囲内にあります。

範囲内に収まるようにするにはどうすればよいですか?

注:重要な場合に備えて、私のタスクの一部は異なる.rakeファイルにあり、それが何かを変更するかどうかについて言及しています。

4

1 に答える 1

4

Rakefile は、他の Ruby コードと同じです。ブロック変数 ( 内で作成された変数do-end) はブロックに対してローカルです。

env変数を他のブロックで見えるようにするには、代わりにインスタンス変数に代入してください:

@env = ENV['ENV'] ...
...
puts @env

または、定数も使用できます。

MYENV = ENV['ENV'] ....
...
puts MYENV

または、使用する前にブロック スコープの外に変数を作成します。

env = nil

task :environment do
  env = ENV['ENV'] ....
end

task :othertask ... do
  puts env
end
于 2012-05-21T20:50:08.177 に答える