我有一个script/cibuild
脚本,我运行Semaphore Hosted CI Service),其中包含...
time bundle exec rake db:setup db:test:prepare --trace; echo
...设置数据库并检查是否有任何待处理的迁移,但由于某些原因,这甚至不能在我的开发机器上运行。
向下划分script/cibuild
的内容归结为:
export RAILS_ENV=test
export RACK_ENV=test
# options to rake 'spec' task
export SPEC_OPTS='--color --format documentation --backtrace spec'
echo "Installing dependencies..."
time bundle install --deployment; echo
echo "Setting-up database..."
time bundle exec rake db:setup db:test:prepare --trace; echo
echo "Running tests..."
time bundle exec rake spec --trace; echo
构建最终将失败,并在Semaphore上显示以下跟踪:
Running tests...
** Invoke spec (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:abort_if_pending_migrations
You have 10 pending migrations:
20130418144736 CreateUsers
20130424134725 CreateCollections
20130506124127 AddStaffToUsers
20130513115848 CreateResourceTypes
20130513140804 InstallHstore
20130513141924 CreateResources
20130513144332 AddCredentialDataToUsers
20130523155851 RenameSubscriptionDataInResource
20130531110125 AddProfilePictureToUser
20130722101545 AddEmailIndexToUser
Run `rake db:migrate` to update your database then try again.
现在在我看来问题可能不在db:setup db:test:prepare
行,而是在rake spec
运行时。我不确定。
无论如何,如果我在我的开发机器中运行......
rake db:drop:all
rake db:setup db:test:prepare
...我最终会得到一个空的测试数据库(没有表格中的“空”等),而......
rake db:drop:all
rake db:setup
rake db:test:prepare
...将按预期创建测试数据库。
有人可能会认为我在某个时候没有运行rake db:migrate
(因此有10个待定迁移),但我非常有信心不是这种情况。虽然我没有db/schema.rb
文件,但rails应该应用所有迁移才能很好地进入最终数据库模式。
请问任何想法?谢谢。
更新
我怀疑此问题可能与将RACK_ENV
和/或RAILS_ENV
环境变量设置为test
有关。这个似乎搞砸了一些东西。