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

时间:2015-03-10 00:00:04

标签: ruby-on-rails yaml 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'] %>

database.env

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

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中遇到错误,说我无法连接到我的数据库,因为

  

拒绝指定的用户名和密码组合:致命:用户“%= ...

的密码验证失败

在终端中,我得到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 

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

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中,加载顺序是不同的(根据文档,过去在class Application < Rails::Application application.rb之后加载Dotenv。)

通过在我的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中的嵌入式ruby,尽管现在该应用程序在命令行中运行良好。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

Heroku要求您在Heroku仪表板中设置一些环境变量 - &gt;设置 - &gt;配置vars

这些包括:

  • 适配器
  • 数据库
  • 用户名
  • 密码
  • 宿主
  • 端口

https://devcenter.heroku.com/articles/rails-database-connection-behavior#configuring-connections-in-rails-4-1

答案 2 :(得分:0)

username: <%= ENV.fetch("DB_USERNAME") %>为我的案例服务