Не читайте переменные ENV в database.yml(Rails 4.2.0, RubyMine 7, Postgres, Ruby 2.2.0, DotEnv)

Я пытаюсь настроить приложение простых рельсов (4.2.0, ruby ​​2.2.0) с помощью PostgreSQL (9.3) с помощью RubyMine (7.0.4); Я планирую развернуть в Хероку.

У меня проблемы с двумя вещами:

  • Сначала (и, что более важно) мои переменные ENV не работают в моем файле database.yml.

  • Во-вторых, RubyMine вообще не распознает erb в этом файле.

database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>

development:
  <<: *default
  database: my_app_development

test:
  <<: *default
  database: my_app_test

production:
  <<: *default
#  database: my_app_production
#  username: <%= ENV['DB_USERNAME'] %>
#  password: <%= ENV['DB_PASSWORD'] %>
  url: <%= ENV['DATABASE_URL'] %>

database.env

(Я использую драгоценный камень dotenv-rails):

DB_USERNAME=my_app
DB_PASSWORD=password

Изменить: Я также пробовал

  • export DB_USERNAME=myapp,
  • DB_USERNAME="my_app" и
  • export DB_USERNAME="myapp"

Gemfile

...
group :development, :test do
  ...
  # Shim to load environment variables from .env into ENV in development.
  gem 'dotenv-rails'
end

Я получаю ошибку в RubyMine, которая говорит, что я не могу подключиться к моей базе данных, потому что

Указанная комбинация имени пользователя и пароля отклоняется: FATAL: аутентификация пароля для пользователя "% =...

В терминале я получаю PG::ConnectionBad: FATAL: password authentication failed for user "lee" (мое локальное имя пользователя), хотя явно передаются переменные (rake db:create DB_USERNAME=...).

Я попытался ввести имя пользователя и пароль непосредственно в файл:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: my_app
  password: password 

Успех! Поскольку проблема не была моим именем пользователя и паролем, я решил попробовать некоторые встроенные рубины:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: <%= "my_app" %>
  password: <%= "password" %> 

Не удачи в RubyMine - FATAL: password authentication failed for user "%=.... Однако это работает с rake db:create с терминала.

Итак, мои два вопроса:

  • Какой шаг я теряю, чтобы заставить переменные ENV работать?
  • Как я могу настроить конфигурацию с RubyMine?

Изменить: первая часть решена

По-видимому, в Rails 4.2 порядок загрузки отличается (Dotenv использовался для загрузки сразу после class Application < Rails::Application в application.rb, согласно документации).

Проблема была решена путем помещения двух строк в мой файл application.rb для загрузки Dotenv ранее:

...
Bundler.require(*Rails.groups)

##### START ADDED CODE #####

Dotenv::Railtie.load
HOSTNAME = ENV['HOSTNAME']

##### END ADDED CODE #####

module MyApp
  class Application < Rails::Application
  ...

Я все еще пытаюсь понять, как заставить RubyMine распознать встроенный рубин в файле database.yml, хотя теперь приложение отлично работает через командную строку.

Ответ 1

Это может быть проблема с загрузкой. Поместите драгоценный камень дотена в жемчуг pg.

Ответ 3

username: <%= ENV.fetch("DB_USERNAME") %> сработало для моего случая