Установите переменную окружения (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
.