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 不知道,这是为什么呢?

我认为 ruby​​ 的动态特性会这样做:

在运行环境任务时,它会创建环境变量,并且由于它是一个依赖项,因此该变量将在我的其他任务的范围内。

我怎样才能拥有它,使其在范围内?

注意:以防万一,我的一些任务位于不同的 .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 回答