簡體   English   中英

Rails 遷移不會改變 schema.rb

[英]Rails migration does not change schema.rb

我有一個未應用於我的 schema.rb 的 Rails 遷移。 遷移應該創建一個表:

class CreateUserGraphs < ActiveRecord::Migration
  def change
    create_table :user_graphs do |t|
      t.string :name
      t.string :content
      t.integer :user_id
      t.string :type_id
      t.integer :upload_id

      t.timestamps
    end

    add_index :user_graphs, [:user_id, :created_at]
  end
end

我做了 db:reset。 然后我嘗試了 rake db:migrate:up VERSION=123123123(這是遷移#)。 我在我的“開發”環境中。

為什么遷移不影響 schema.rb?

文檔

rake db:reset任務將刪除數據庫,重新創建它並將當前架構加載到其中。

這與運行所有遷移不同。 它只會使用當前schema.rb文件的內容。 如果無法回滾遷移,'rake db:reset'可能對您沒有幫助。 要了解有關轉儲架構的更多信息,請參閱“架構轉儲和您”。

所以rake db:reset => db:drop db:create db:schema:load db:seed

要運行所有遷移,請使用: rake db:drop db:create db:migrate

或者db:migrate:reset => rake db:drop db:create db:migrate

參考

遷移的“版本”通過時間戳完成。 Rails通過比較上次運行遷移的時間戳並查看是否有更新的遷移來檢查需要運行的遷移。

如果新遷移的版本為123123123 ,則不會運行該版本,因為該數字不大於當前時間戳(例如, 20131209170300 )。

我遇到了同樣的問題......事實證明這是因為我編輯了我的遷移文件的名稱看起來更整潔。 確保不要像我一樣刪除遷移文件標題中的時間戳。

我刪除了遷移文件,模型,控制器和相關測試,並重新生成了修復問題的控制器和模型。

我遇到過同樣的問題。 我在開發環境(使用Passenger和Apache)工作。 生產和開發環境使用相同的數據庫。

當我運行rake db:migrate ,db已更改,但架構未更新。 然后我運行rake db:migrate RAILS_ENV=development ,現在架構已更新。

似乎rails / rake對我的環境感到困惑。 乘客設置了這個網站的發展環境,但rake about說:“環境的生產”。

首先,您嘗試降低遷移率

rake db:migrate:down VERSION = 20180605141404#“VERSION = 20180605141404您的遷移版本”

再次進行遷移

rake db:migrate:up VERSION = 20180605141404#“VERSION = 20180605141404您的遷移版本”

找到了獲取錯誤描述的方法。 運行rake db:migrate:reset和received

`SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "rooms" ADD "priority" integer NOT NULL/usr/local/rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.9/lib/sqlite3/database.rb:91:in `initialize`'

在運行遷移之前嘗試停止 Spring。 這個對我有用

bin/spring stop

在我的例子中,它是config/application.rb中的配置設置:

config.active_record.dump_schema_after_migration = false

將其更改為true解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM