Rakefiles: переменная область видимости доступна в скриптах `load`
В моем ~/Sites/
каталог у меня есть всемогущий Rakefile:
desc "Run deliver in each directory"
task :deliver do
sh 'for a in $(ls ./*/Rakefile); do (cd $(dirname $a); rake -f Rakefile deliver); done'
end
(Наряду с другими забавными производственными задачами и глупой задачей "по умолчанию", в которой перечислены все задачи [см. https://github.com/ruby/rake/issues/22])
Некоторые каталоги внутри Sites
есть Rakefile в них. Большинство выглядит так:
# Rsync options
production_server = 'pacificmedicaltraining.net'
production_user = 'training2'
production_www_dir = 'www'
local_www_dir = 'www'
local_git_dir = 'git'
desc "Run all build and deployment tasks, for continuous delivery"
task :deliver => [:pullgit, :buildjekyll, :pushproduction]
desc "Bring deployed server files local"
task :pullgit do
puts 'Pulling git'
sh "cd '#{local_git_dir}'; git pull"
puts 'Pulled'
end
...
Поведение этого файла Rakefile полностью определяется параметрами в верхней части и deliver
задача (другие сайты могут не использовать Jekyll для сборки). Все остальные задачи в этом файле копируются и вставляются. В интересах DRY я удалил скопированные задачи в ~/Sites/common.rake
и включил этот файл с load '../common.rake'
в содействующих файлах.
Вытащить мерзавец грабли прервано! NameError: неопределенная локальная переменная или метод 'local_git_dir' для main:Object /Users/williamentriken/Sites/common.rake:4:in 'блок в' Tasks: TOP => pullgit (полная трассировка выполняется путем запуска задачи с помощью --trace)
Как сделать эту переменную доступной для load
Эд сценарий?
1 ответ
Как сделать эту переменную доступной для
load
Эд сценарий?
Ты не можешь Это локальная переменная. Локальные переменные являются локальными для области, в которой они определены, они не существуют в других областях. Вот почему они называются локальными переменными.