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

Экспериментирование с 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'] %>

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

Ответы

Ответ 1

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

Они могут быть установлены в командной строке до запуска сервера или программы. Например, в 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 в исходный элемент управления и игнорируют файлы config/*.yml из исходного элемента управления. При клонировании репозитория копирование и исправление примеров до правильных значений является частью настройки, например, запуск rake tmp: create для создания структуры папок tmp.

Ответ 2

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

DATABASE_URL="mysql2://user:[email protected]/app_development" rails server

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

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

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