【发布时间】:2015-05-11 07:30:15
【问题描述】:
我正在尝试使用 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"
宝石文件
...
group :development, :test do
...
# Shim to load environment variables from .env into ENV in development.
gem 'dotenv-rails'
end
我在 RubyMine 中收到一个错误,提示我无法连接到我的数据库,因为
指定的用户名和密码组合被拒绝:FATAL: password authentication failed for user "%=...
在终端中,我得到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 中,加载顺序不同(根据文档,Dotenv 曾经在 application.rb 中的 class Application < Rails::Application 之后立即加载)。
通过在我的 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,尽管现在该应用程序可以通过命令行正常工作。
【问题讨论】:
-
RubyMine 尝试连接到数据库,但失败会报错,是吗?
-
我不确定我是否理解你的问题,但我得到的错误是:
FATAL: password authentication failed for user "%= ENV['DB_USERNAME'] %"。
标签: ruby-on-rails yaml rubymine postgresql-9.3