Развернутое приложение digitalocean не считывает переменные среды - PullRequest
0 голосов
/ 22 марта 2019

Я развернул приложение в digitalocean, используя образ Ruby on Rails .По умолчанию он настроен для пользователя с именем rails.Мой rails.service файл выглядит так:

[Unit] 
Description=OneMathsExamQuestions 
Requires=network.target 

[Service] 
Type=simple 
User=rails 
Group=rails 
WorkingDirectory=/home/rails/one_maths_exam_questions/ 
ExecStart=/bin/bash -lc 'bundle exec puma' 
TimeoutSec=30s 
RestartSec=30s 
Restart=always 

[Install] 
WantedBy=multi-user.target                                                  

Мне нужно использовать некоторые переменные окружения в моем приложении.Поэтому я добавил несколько строк в мои /home/rails/.bashrc и /root/.bashrc файлы (я подозреваю, что необходим только первый, но ни один из них не работает):

export A="val1"
export B="val2"
...

Теперь: если я позвоню echo $Aв терминале я получаю ожидаемый результат.Если я захожу в консоль Rails и выполняю ENV["A"], я получаю ожидаемый результат.Но мое приложение не работает должным образом (желаемое поведение - подключение к Amazon S3; точная ошибка не важна).

Если я захожу в свой контроллер и явно регистрирую переменные env с помощью Rails.logger.debug ENV, я просто получаю ENV, а Rails.logger.debug ENV["A"] возвращает пустую строку (я думаю, nil).Точно так же, если я пытаюсь сделать ENV["RAILS_ENV"], который обязательно должен работать, я получаю то же самое.Но Rails.env возвращает "development", как и ожидалось.

Более того, если я явно напишу

ENV["A"] = "val1"
ENV["B"] = "val2"
...

в моем config/application.rb, приложение будет работать правильно.Но это, очевидно, не постоянное решение, так как я не могу зафиксировать это для контроля версий.

Я не использую драгоценный камень figaro, который, как мне кажется, предлагают многие места, но я не понимаю, почему я должен это делать, так как он отлично работает на моей локальной машине.

1 Ответ

0 голосов
/ 22 марта 2019

ОК, похоже, что если я экспортирую переменные окружения в .profile, то они не будут обнаружены сервером.Если я удаляю их из .bashrc, то у сервера нет проблем, но я не могу получить переменные в терминале.Я думаю, они просто делают разные вещи?

...