2016-08-20 111 views
1

我遇到了一個非常奇怪的問題,其中Rails不會在我的計算機上執行遷移。我在OS X 10.11.6上使用Rails 4.2.5,Ruby 2.3.1p112和Postgres 9.5.3。未運行遷移的Rails

數據庫在Heroku和另一臺Mac上使用相同版本的所有內容創建/遷移並正常運行。

如果我從Heroku或其他機器導入數據庫,即使運行rails s時,即使我使用的是相同的源版本,我也會遇到掛起的遷移錯誤。

運行db:schema告訴我:

You have 23 pending migrations: 
    20160627035230 DeviseCreateUsers 
    20160627035442 CreatePages 
    20160627055031 AddHeroToPages 
    20160627061237 AddAdministratorToUser 
    20160627061943 AddNameToUser 
    20160628042547 CreateSchools 
    20160628042702 CreateLicenses 
    20160628042841 JoinUsersAndSchools 
    20160628043323 AddJoinCodeToSchools 
    20160630012028 AddExpiryToLicenses 
    20160630024743 CreatePurchases 
    20160630043846 AddOmniauthToUsers 
    20160704003626 CreateMyIndustries 
    20160704010403 CreateMyCareers 
    20160704013913 CreateMyQuestions 
    20160704074916 AlterMyQuestionsDrop 
    20160704075947 AlterMyQuestionsChange 
    20160705071702 CreateUserAttributes 
    20160710235339 CreateAccessabilities 
    20160711000000 AddToAccessabilities 
    20160711044815 CreateMedia 
    20160711045327 AddLocaleToMedium 
    20160814010549 CreateInvoices 
Run `rake db:migrate` to update your database then try again. 

運行遷移,然後告訴我:

** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Invoke db:load_config (first_time) 
** Execute db:load_config 
** Execute db:migrate 
    ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations".* FROM "schema_migrations" 
** Invoke db:_dump (first_time) 
** Execute db:_dump 
** Invoke db:schema:dump (first_time) 
** Invoke environment 
** Invoke db:load_config 
** Execute db:schema:dump 
    ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations".* FROM "schema_migrations" 

清單僅PSQL表顯示schema_migrations:

20:09 $ rails db 
psql (9.5.3) 
Type "help" for help. 

mytalents_development=# \dt 
        List of relations 
Schema |  Name  | Type |  Owner  
--------+-------------------+-------+---------------- 
public | schema_migrations | table | aidancornelius 
(1 row) 

mytalents_development=# 

我也似乎得到奇怪的錯誤db:migrate:up

20:11 $ rake db:migrate:up 
rake aborted! 
ActiveRecord::UnknownMigrationVersionError: 

No migration with version number 0 

/usr/local/lib/ruby/gems/2.3.0/gems/activerecord-4.2.5/lib/active_record/migration.rb:939:in `run' 
/usr/local/lib/ruby/gems/2.3.0/gems/activerecord-4.2.5/lib/active_record/migration.rb:834:in `run' 
/usr/local/lib/ruby/gems/2.3.0/gems/activerecord-4.2.5/lib/active_record/railties/databases.rake:82:in `block (3 levels) in <top (required)>' 
/usr/local/lib/ruby/gems/2.3.0/gems/rake-11.2.2/exe/rake:27:in `<top (required)>' 
Tasks: TOP => db:migrate:up 
(See full trace by running task with --trace) 

有沒有人有任何關於可能會發生什麼的見解? Rails 4和Rails 5中的其他項目都可以在這臺機器上運行,但這個不會。

在此先感謝您的任何建議!

+0

' rake db:migrate:up'需要一個'version'數字,就像你的情況一樣,你可以這樣做'rake db:migrate:up VERSION = 20160627035230' – Deep

回答

1

我敢打賭,這是Postgres模式的一個問題。我有類似的問題,但在我的情況下,遷移工作在我的本地機器上,而不是在Heroku上。這是由schema_search_path的不同設置引起的。在我的本地機器上,它是'"$user",public',但是在Heroku上的'"$user", public'",這個額外的空間打破了一切。

在你的情況下,你需要檢查你的機器上你的schema_search_path是什麼。也許你應該在database.yml文件中將它設置爲「public」。您可以使用SHOW search_path查詢進行檢查。

+0

完全正確。舊的Rails代碼將'show search_path'的結果拆分爲',',這與新的默認值分離。解決方法是在'database.yml'的連接設置中放置以下內容:'schema_search_path:'「$ user」,public'' – sanityinc

1

的軌道遷移文件(遷移過程)的順序是最重要的一部分,所以你可以嘗試使用遷移第一遷移文件:

rake db:migrate VERSION=20160627035230 

然後只使用db:migratedb:migrate Version=20160814010549