我有一个script/cibuild
脚本,我在Semaphore Hosted CI Service上运行),其中包含……</p>
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
运行时。我不知道。
无论如何,如果我在我的开发机器上运行……</p>
rake db:drop:all
rake db:setup db:test:prepare
......我最终会得到一个空的测试数据库(“空”,如没有表等),而......</p>
rake db:drop:all
rake db:setup
rake db:test:prepare
... 将按预期创建测试数据库。
有人可能会认为好像我rake db:migrate
在某个时候没有运行(因此有 10 个待定迁移),但我非常有信心事实并非如此。虽然我没有db/schema.rb
文件,但 rails 应该应用所有迁移来获得最终的数据库模式。
请问有什么想法吗?谢谢你。
更新:
我有点怀疑这个问题可能与设置RACK_ENV
和/或RAILS_ENV
环境变量有关test
。这似乎有点把事情搞砸了。