我在相同的命名空间下有两个Rake任务,如下所示:
namespace :db do
task :first_task => :environment do
server_name='myserver'
connect_to(server_name)
end
task :second_task => :environment do
server_name='myserver'
do_something_with(server_name)
end
end
如您所见,两个任务都在相同的命名空间下,并且两个任务都使用server_name='myserver'
常量变量。在同一个命名空间下定义server_name
变量两次看起来真的很难看,我怎么能有一个地方定义这个变量,这样两个任务都可以使用它?
试试这个:
namespace :db do
server_name='myserver'
task :first_task => :environment do
connect_to(server_name)
end
task :second_task => :environment do
do_something_with(server_name)
end
end
命名空间可以访问在其作用域之前声明的变量。
我想以David Sulc的答案为基础,但我建议使用实例变量:
namespace :db do
@server_name = 'myserver'
task first_task: :environment do
connect_to @server_name
end
task second_task: :environment do
do_something_with @server_name
end
end
这里的优点是以后的代码可以修改@server_name
——这是你不能用局部变量做的:
namespace :db do
@server_name = 'server_2'
end