在我的config/database.yml中使用Rails 3.2.6应用程序中的简单Rails sqlite3配置示例,我曾经重置我的开发数据库,重新播种它,并通过执行以下操作来准备我的测试数据库:
$ rake db:reset
$ rake db:test:prepare
Run Code Online (Sandbox Code Playgroud)
在看了这篇关于在不同的数据库引擎上用Travis CI测试Rails应用程序的博客文章后,我想我会尝试一下,所以我使用Homebrew安装了mysql和postgresql (我在OSX Snow Leopard上),设置它们按照brew info说明.我安装了相关的gem,并按如下方式配置了数据库和Travis文件:
的Gemfile
# ...
group :development, :test do
# ...
gem 'sqlite3', '1.3.6'
end
group :test do
# ...
# Test mysql on Travis CI
gem 'mysql2', '0.3.11'
end
group :test, :production do
# ...
# Test postgres on Travis CI and deploy on Heroku
gem 'pg', '0.13.2'
end
Run Code Online (Sandbox Code Playgroud)
配置/ database.yml的
sqlite: …Run Code Online (Sandbox Code Playgroud) rake ruby-on-rails ruby-on-rails-3 travis-ci ruby-on-rails-3.2
我有一个具有特殊"临时"环境的登台机器.我总是忘记在那台机器上运行rake任务,如:
rake jobs:work RAILS_ENV=staging
Run Code Online (Sandbox Code Playgroud)
所以我最终做了:
rake jobs:work
Run Code Online (Sandbox Code Playgroud)
然后我很困惑为什么我的数据库中没有任何变化.卫生署!这是因为我不记得提供RAILS_ENV = staging.
但我永远不需要在该服务器上运行任何开发环境.默认情况下,如何在"临时"环境中运行rake任务?
我已经seeds.rb填充了我的开发数据库.我知道我可以seeds.rb使用以下方法轻松应用于我的测试数据库:
rake db:seed RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
但是,我想要一个不同的 seeds.rb文件来填充我的测试数据库.也许吧seeds_test.rb.这对于rails程序员来说一定是一个非常普遍的要求,不是吗?
如果没有简单的方法可以做到这一点rake db:seed:seeds_test RAILS_ENV=test,那么我将如何创建一个rake任务呢?我会想到这样的事情lib/tasks/test_seeds.rake:
namespace :db do
desc "Seed data for tests"
task :seed_test => :environment do
load "#{Rails.root}/db/seeds_test.rb"
end
end
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,但是我希望我的rake任务能够自动知道只将这个应用到测试数据库而不必指定:
rake db:seed_test RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
如何获取rake任务,以便我必须在命令行中输入:
rake db:seed_test
Run Code Online (Sandbox Code Playgroud)
更新:另一个stackoverflow问题链接到答案的位置:
Rails.env = 'test'
Run Code Online (Sandbox Code Playgroud)
不幸的是,实际上并没有做任何事情(至少从Rails 4.2开始):(.