2016-02-15 9 views
0

Я использую всякий раз, когда драгоценный камень. Я хотел установить переменные env перед запланированной задачей. Вторая строка в приведенном ниже коде была командой, которую я хотел запустить в файле schedule.rb. Но похоже, что я не могу это сделать, поэтому я прокомментировал это и попытался по-разному. Все еще ничего не работает. Печать env внутри рубинового кода, по-видимому, правильно отображает нужную переменную, но после запуска «bundle exec when» и проверки терминала с помощью команды env переменные, похоже, не существуют. Что здесь не так?Неправильно заданы переменные среды

every :hour do 
    # Run shell script to assign variables and continue the rake task 
    #system "for line in `cat config/myEnvFile.env` ; do export $line ; done" 
    f = File.open("config/myEnvFile.env", "r") 
    f.each_line do |line| 
    j = line.split(" ") 
    arr = j.first.split("=") 
    system "export #{arr[0]}=#{arr[1]}" 
    system "env" 
    # This line below is also another way but still nothing works 
    ENV[arr[0]] = arr[1] 
    end 
    rake "task:continue_doing_my_task" 
end 
+0

Это не способ сделать это, нет никакой причины загружать одни и те же переменные среды каждый час. Вместо этого загрузите эти переменные, когда ваше приложение запустится в его среду через что-то вроде https://github.com/bkeepers/dotenv – Anthony

+0

каждые 1 час для тестирования, когда его развертывают каждые 1 день, но это не проблема. – underScorePassionFruit

ответ

0

код в вашем every -блока выполняется, когда whenever --update-crontab бежит, не каждый час.

Вам необходимо сделать команду, сгенерированную rake "task:continue_doing_my_task", загрузить эти переменные, либо экспортировать их в строку, используя синтаксис bash (который становится уродливым), либо используя dotenv, как это предлагается в комментарии от @Anthony.

См. Мой ответ на ваш follow-up question, который объясняет это более подробно.

Смежные вопросы