1

我正在开发一个 Ruby on Rails 应用程序。我最近更新到最后一个 Rails 版本(4.2.3),我发现当我运行rake test它时会擦除我的开发数据库。我正在使用 Figaro gem 来声明我的所有环境变量。

这是我的 application.yml 文件

#
# == Database
#
db_host    : 'localhost'
db_username: 'root'
db_password: 'root'

development:
  db_name: 'database-dev' # Not found by Figaro
test:
  db_name: 'database-test' # Not found by Figaro

我的 database.yml 文件

default: &default
  adapter: mysql2
  pool: 5
  timeout: 5000
  username: <%= Figaro.env.db_username %>
  password: <%= Figaro.env.db_password %>
  database: <%= Figaro.env.db_name %>

  development:
    <<: *default

  test:
    <<: *default

如果我把db_name它放在development钥匙下面,我会收到消息no database selected,但如果我把它移到上层,它就会起作用。但是rake test,也不使用test密钥来加载数据库配置并删除我的开发数据。

以前运行的很完美,不明白哪里出了问题。谢谢你的帮助。

我的项目

  • 导轨 4.2.3
  • 红宝石 2.2.2
  • 费加罗 1.1.1
4

1 回答 1

0

你能展示一下你是如何运行测试规范的吗?您设置了哪些环境(在 config/environments 目录中)?另外,您运行的是哪个版本的 RSpec(并且您是否安装了 rspec-rails gem)?

您的spec_helper.rb文件(或使用 RSpec 3.x rails_helper.rb)应该在顶部有这一行:

ENV['RAILS_ENV'] ||= 'test'

如果没有,请尝试添加它。此外,您可以尝试添加打印语句进行调试:

puts ENV['RAILS_ENV']

一般来说,这应该总是有效的,但它是一个丑陋的(你不应该这样做):

RAILS_ENV=test bundle exec rspec spec
于 2015-07-21T04:38:17.027 回答