0

我有一个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。这似乎有点把事情搞砸了。

4

0 回答 0