Установить переменную среды (ENV) для использования в Rails - PullRequest
14 голосов
/ 11 февраля 2011

Экспериментируя с 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? или они на системном уровне? и если да, то где / как установить, чтобы ни одна учетная запись пользователя не входила в систему, чтобы они были действительными?

Ответы [ 2 ]

14 голосов
/ 11 февраля 2011

Хеш 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: create для создания структуры папок tmp.

0 голосов
/ 29 августа 2013

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

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

, и вы можете проверить это с помощью:

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

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

...