Capistrano: Как установить глобальную переменную среды? - PullRequest
3 голосов
/ 21 октября 2011

Мне нужно найти способ установить глобальную переменную env из Capistrano. Фактическое значение генерируется во время выполнения, я не могу проверить его в репо и загрузить оттуда.

Это значение должно быть загружено как ENV['RAILS_ASSET_ID'] в одном инициализаторе.

Как я могу это сделать?

Ответы [ 4 ]

6 голосов
/ 06 сентября 2012

Разве вы не можете использовать переменную default_environment capistrano?cf github / capistrano

Например, мы можем использовать его для производства rbenv:

set :default_environment, {
'PATH' => "$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
}
3 голосов
/ 21 октября 2011

Как насчет того, чтобы просто указать его в инициализаторе?

ENV['RAILS_ASSET_ID'] = 12345
2 голосов
/ 21 октября 2011

Если под глобальной переменной вы подразумеваете что-то, что генерируется в Capistrano, а затем используется в Rails, тогда да, вам придется создать какой-то файл. Переменные Ruby не сохраняются между запусками. Переменные среды могут быть установлены, но применяются только к подпроцессам.

Один из способов вывести файл на сервер во время развертывания - это то, что у вас есть, только удаленный:

run "echo #{asset_version} > #{release_path}/config/asset_version.conf"

Позже вы можете взять и прочитать это значение, как вы сделали.

1 голос
/ 21 октября 2011

В качестве обходного пути я пока использую этот метод:

desc 'My custom task'
task :task_foo do
  asset_version = 12345
  system "echo #{asset_version} > RAILS_ASSET_ID"
end

и извлекается в инициализаторе:

File.open(Rails.root.join 'RAILS_ASSET_ID').read.strip]

Но должен быть лучший способ. Есть идеи?

...