Я пытаюсь настроить приложение простых рельсов (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, хотя теперь приложение отлично работает через командную строку.