2011-07-14 34 views
3

最近切換到Rails 3.1.0.rc4,並且我無法讓我們的CI構建版運行。它歸結爲以下簡單情況:rails 3.1 db:測試:準備和「待定遷移」問題

 
-bash-3.2$ echo $RAILS_ENV 
test 
-bash-3.2$ bundle exec rake db:drop db:create db:test:prepare 
You have 21 pending migrations: 
    20100628174219 InitialSchema 
    20100706175001 AddCompanyToClassifieds 
    20100720132917 CartItemActionMigration 
    20100811192506 AddJobTitleToDirectoryListings 
    ... 

如果我更換bundle exec rake db:drop db:create db:migrate db:test:prepare它工作正常該命令。

在挖掘更深的核心db:test:prepare任務有db:abort_if_pending_migrations作爲先決條件。

現在我只是想念一些明顯的東西,還是完全沒有意義?運行db:test:prepare(在標準情況下)調用db:schema:load,它執行schema.rb - 其整個要點是加載模式而不運行所有遷移。除非所有遷移都已執行(因此在db:test:prepare之前強制執行db:migrate),否則無法運行,是不是完全無用?

我想我可以將額外的db:migrate添加到我的CI構建過程中,但我想知道我做錯了什麼。

回答

0

我相信db:test:prepare不打算在測試環境中運行(否則您可以自己運行db:schema:load)。通常你會在開發環境中運行db:test:prepare。然後檢查待處理的遷移是非常有用的(你會知道你的同事是否在運行之前進行了一些新的遷移,並且通過了一堆測試)。由於運行測試運行db:test:prepare無論如何,你應該很少需要手動運行(當然不是你的CI構建)。省略呼叫db:test:prepare

+0

感謝您的回覆,但我沒有手動呼叫db:test:prepare - 這是rake spec的預先請求。我只是手動列出它以簡化問題。 rake spec應該在測試環境中運行,所以我很難想象db:test:prepare僅適用於開發環境。 (事實上​​,我絕不會在開發模式下使用它,因爲它會破壞我的數據。)再次感謝您的答覆。 –

+0

@David mcCullars:通過'activerecord/lib/active_record/railties/databases.rake',db:test:prepare'永遠不會破壞你的開發數據,並且不打算在開發環境中運行'test'命名空間在'test'數據庫上運行)。我不能說'spec'任務,因爲我沒有使用它,但它聽起來像不應該在測試環境中運行。 – cam