【问题标题】:ENV variables are not set for test environment未为测试环境设置 ENV 变量
【发布时间】: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 是什么意思 - 一旦运行任何测试,它首先运行数据库配置?在此之前我没有任何东西可以使用。此外,它与spring gem 无关。我已经在问题中指出,即使没有那个宝石,它也在发生。
  • 如果您打开一个新的终端选项卡并输入echo $PG_USERNAME,您会看到什么?

标签: ruby-on-rails ubuntu


【解决方案1】:

我在 cmets 中提出了一个快速修复,但我建议根据您的配置使用出色的 dotenv gem 进行配置加载。它会顺便解决您当前的问题。

【讨论】:

  • 您确定了哪些根本原因促使您建议使用新的 gem?我不能随机添加宝石并希望它能起作用。我想在没有快速修复的情况下解决它,这也需要我在我的应用程序中更改一些额外的代码
  • P.S.转到.bash_profile 并没有帮助,尽管无论如何它都应该在那里:/
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多