我正在尝试使用RubyMine(7.0.4)与PostgreSQL(9.3)建立一个简单的rails应用程序(4.2.0,ruby 2.2.0);我正计划部署到Heroku。
我遇到两件事有问题:
首先(更重要的是),我的ENV变量在我的database.yml文件中不起作用。
其次,RubyMine根本没有识别该文件中的erb。
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'] %>
(我正在使用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中遇到错误,说我无法连接到我的数据库,因为
拒绝指定的用户名和密码组合:致命:用户“%= ...
的密码验证失败
在终端中,我得到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
。
所以,我的两个问题是:
显然在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,尽管现在该应用程序在命令行中运行良好。
答案 0 :(得分:0)
这可能是一个加载问题。将dotenv gem放在pg gem之前。
答案 1 :(得分:0)
Heroku要求您在Heroku仪表板中设置一些环境变量 - &gt;设置 - &gt;配置vars
这些包括:
答案 2 :(得分:0)
username: <%= ENV.fetch("DB_USERNAME") %>
为我的案例服务