2015-05-26 4 views
1

Я провел последние пару дней, чтобы получить redis/resque и запустить для моего проекта. У меня есть код в моем инициализаторе, который сообщает Resque URL redis для использования; этот URL-адрес хранится в переменной среды. Код инициализации довольно прост:Почему мои переменные среды не загружаются должным образом перед кодом инициализации?

Resque.redis = Redis.new(url: "#{ENV['REDISTOGO_URL']}") 

Теперь этот код прекрасно работает, когда я бегу rails server. Он также отлично работает, когда я запускаю сервер с мастером (foreman start). Однако, когда я пытаюсь запустить консоль, он взрывается со следующей ошибкой: gems/redis-3.2.1/lib/redis/client.rb:405:in '_parse_options': invalid uri scheme '' (ArgumentError). Я получаю эту ошибку, пытаюсь ли я запускать консоль самостоятельно (rails console) или с мастером (foreman run rails console).

По способу устранения я решил, что ошибка связана с линией инициализации Resque выше. Когда я прокомментирую это, консоль запускается без каких-либо проблем. На самом деле запутанная вещь заключается в том, что, когда я выполняю эту строку на своей рабочей консоли, она работает нормально! После некоторого разговора, кажется, что мои переменные среды не загружаются до кода инициализации.

Это странно. Любая помощь высоко ценится!

+0

Как вы настраиваете переменные среды? –

+0

Какая конкретная версия Rails 4? IIRC было что-то с изменением обратного вызова 'before_configuration'. Возможно, попробуйте создать резервную копию версии (например, я предполагаю, что вы используете 4.2?) И посмотрите, разрешит ли это ее, по крайней мере временно. –

+0

Я загружаю переменные среды из файла в локальный каталог проекта. Я загружаю их, используя команду: 'source variables' перед запуском консоли. Я проверил запуск 'printenv', чтобы убедиться, что они правильно загружены в оболочку, и я могу подтвердить правильность определения REDISTOGO_URL. – staxim

ответ

1

Итак, после многократного поиска я обнаружил, что эта проблема, по-видимому, связана с Spring (добавлена ​​в Rails 4.1), которая предварительно загружает экземпляр вашего приложения в фоновом режиме.

Смущает то, что это повлияло только на инициализаторы Rails в моем коде ... после загрузки консоли я могу без проблем получить доступ к правильным переменным среды.

«Исправить» было довольно просто. Вы просто запускаете spring stop перед запуском консоли снова. Вы также можете обновить весну, чтобы следить за любыми файлами среды, чтобы она правильно загружала их, если они будут меняться в будущем. См. this SO answer для получения более подробной информации о настройке весны для правильного просмотра ваших файлов env.

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