Установить переменную окружения (ENV) для использования в рельсах

экспериментируя с MongoID на сервере Rails и запутавшись в том, как/где установить переменные среды.

config/mongoid.yml шаблон по умолчанию:

defaults: &defaults
  host: localhost

...

# set these environment variables on your prod server
production:
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>

мой вопрос в том, установлены ли они где-нибудь в рельсах? или они на системном уровне? и если да, то где / как установить, чтобы учетная запись пользователя не должна быть зарегистрирована для их действительности?

2 ответов


хэш ENV будет иметь значения из системной среды с момента запуска процесса rails.

Они могут быть установлены в командной строке перед запуском сервера или программы. Например в bash:

export MONGOID_USERNAME='username'

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

их также можно установить, например, в Apache с SetEnv. Например:

<Location /app >
    SetEnv MONGOID_HOST 'localhost'
    SetEnv MONGOID_PORT '8883'
    SetEnv MONGOID_USERNAME 'username'
</Location>

Это может быть где угодно SetEnv является законным в вашей конфигурации apache, и это тот же контекст, что и ваше приложение.

Что касается вашего комментария о лучших практиках, некоторые люди помещают пример файла конфигурации yml в систему управления версиями и игнорируют config/*.yml файлы из системы управления версиями. При клонировании репозитория копирование и исправление примеров до правильных значений является частью установки, например запуск rake tmp: создать, чтобы создать структуру папок tmp.


Я хотел добавить еще один вариант. При загрузке Rails попытается прочитать DATABASE_URL как url-адрес и подключение к базе данных из этой переменной env (игнорирование базы данных.в формате YML). Вы должны указать базу данных, как:

DATABASE_URL="mysql2://user:pass@localhost/app_development" rails server

и вы можете проверить это через:

DATABASE_URL="..." rails runner "p ActiveRecord::Base.connection_config"

Это просто еще один вариант вместо того, чтобы ставить настройки erb в database.yml.