我的rake任务似乎没有其他对象在范围内?

时间:2012-05-21 20:32:56

标签: ruby scope rake

(我没有使用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文件中,只要提一下是否会改变任何内容。

1 个答案:

答案 0 :(得分: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