不读取database.yml中的ENV变量(Rails 4.2.0,RubyMine 7,Postgres,Ruby 2.2.0,DotEnv)

Lee*_*Lee 10 yaml ruby-on-rails rubymine postgresql-9.3

我正在尝试使用RubyMine(7.0.4)与PostgreSQL(9.3)建立一个简单的rails应用程序(4.2.0,ruby 2.2.0); 我正计划部署到Heroku.

我遇到两件事有问题:

  • 首先(也是更重要的),我的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'] %>
Run Code Online (Sandbox Code Playgroud)

database.env

(我正在使用dotenv-rails gem):

DB_USERNAME=my_app
DB_PASSWORD=password
Run Code Online (Sandbox Code Playgroud)

编辑:我也试过了

  • 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
Run Code Online (Sandbox Code Playgroud)

我在RubyMine中遇到一个错误,说我无法连接到我的数据库,因为

指定的用户名和密码组合被拒绝:致命:用户"%= ...的密码验证失败

在终端中,我得到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 
Run Code Online (Sandbox Code Playgroud)

成功!由于问题不是我的用户名和密码,我决定尝试一些基本的嵌入式ruby:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5
  username: <%= "my_app" %>
  password: <%= "password" %> 
Run Code Online (Sandbox Code Playgroud)

RubyMine没有运气 - FATAL: password authentication failed for user "%=....但是,这确实适用rake db:create于终端.

所以,我的两个问题是:

  • 我想让ENV变量工作的那一步是什么?
  • 如何使配置与RubyMine一起使用?

编辑:第一部分解决了

显然,在滑轨4.2,加载次序是不同的(Dotenv用于后右被装载class Application < Rails::Applicationapplication.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
  ...
Run Code Online (Sandbox Code Playgroud)

我仍在试图弄清楚如何使RubyMine识别database.yml中的嵌入式ruby,尽管现在该应用程序通过命令行正常工作.

Tho*_*Nys 0

这可能是加载问题。将 dotenv gem 放在 pg gem 之前。

  • 这是 RubyMine 的问题,而不是 Ruby 的问题。`rails server` 等可以读取嵌入的 ruby​​ 没有问题;只是 RubyMine 数据库工具没有执行它。不过我不再使用 RubyMine,所以我不确定这是否仍然是一个问题。 (2认同)