rake db:setup db:test:prepare将不会按预期运行

时间:2013-08-14 09:13:53

标签: ruby-on-rails rake

我有一个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有关。这个似乎搞砸了一些东西。

0 个答案:

没有答案