2012-05-21 31 views
2

(我没有使用Rails)的我的耙子任务看起来没有范围内的其他对象?

我有一耙的任务,将是在像通过了环境:

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

我认为红宝石的动态特性这样做:

当运行环境的任务,它会创建环境变量,并且由于它是一个扶养这个变量将是我的其他任务范围。

我怎么能拥有它,因此它在范围内?

注意:如果它很重要,我的一些任务是在不同的.rake文件中,只是提及是否会改变任何内容。

回答

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