【发布时间】:2016-08-11 09:15:35
【问题描述】:
我在database.yml 中有一个这样的测试数据库集:
test:
adapter: postgresql
encoding: unicode
database: database_test
host: localhost
pool: 5
username: <%= ENV['PG_USERNAME']%>
password: <%= ENV['PG_PASSWORD']%>
我使用spring gem 来运行测试(尽管这并不重要,因为不使用它也会出现问题)
问题是每次我运行bundle exec rspec spec/ 时都会收到错误no password supplied (PG::ConnectionBad):
/.bundle/ruby/2.3.0/gems/activerecord-4.2.0/lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize': fe_sendauth: no password supplied (PG::ConnectionBad)
我需要手动将其更改为:
test:
adapter: postgresql
encoding: unicode
database: database_test
host: localhost
pool: 5
username: postgres
password: postgres
为了让它工作。
我在~/.bashrc中设置了变量:
export PG_USERNAME="postgres"
export PG_PASSWORD="postgres"
奇怪的是,在development 模式下,当我使用与test 相同的结构时,一切工作正常:
development:
adapter: postgresql
encoding: unicode
database: database_dev
host: localhost
pool: 5
username: <%= ENV['PG_USERNAME']%>
password: <%= ENV['PG_PASSWORD']%>
我的test 环境有什么问题,如何解决它才能像在开发模式下一样自动使用ENV['PG_USERNAME']?
【问题讨论】:
-
听起来好像当 spring 运行时,它运行在与普通用户不同的环境中。在要运行的第一个测试文件中添加一些简单的日志记录(在加载 db 配置之前发生),例如
puts "whoami = #{`whoami`.inspect}"和puts "ENV = #{ENV.inspect}" -
如果您使用的是 mac OS X,请尝试将其放入您的
.bash_profile而不是您的 bashrc。另外,我会在下面为您发布答案。 -
有一个标签-
ubuntu,所以我用的是ubuntu -
@MaxWilliams
that happens before the db config is loaded是什么意思 - 一旦运行任何测试,它首先运行数据库配置?在此之前我没有任何东西可以使用。此外,它与springgem 无关。我已经在问题中指出,即使没有那个宝石,它也在发生。 -
如果您打开一个新的终端选项卡并输入
echo $PG_USERNAME,您会看到什么?
标签: ruby-on-rails ubuntu