Rails迁移不会更改schema.rb
我有一个rails应用程序没有应用到我的schema.rb。 迁移应该创建一个表:
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
)。
我遇到了同样的问题……事实certificate这是因为我编辑了我的迁移文件的名称看起来更整洁。 确保不要像我一样删除迁移文件标题中的时间戳。
我删除了迁移文件,模型,控制器和相关测试,并重新生成了修复问题的控制器和模型。
我遇到过同样的问题。 我在开发环境(使用Passenger和Apache)工作。 生产和开发环境使用相同的数据库。
当我运行rake db:migrate
,db已更改,但架构未更新。 然后我运行rake db:migrate RAILS_ENV=development
,现在架构已更新。
似乎rails / rake对我的环境感到困惑。 乘客为这个网站设置了一个开发环境,但是说“环境生产”。
找到了获取错误描述的方法。 运行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`'
首先,您尝试降低迁移率
rake db:migrate:down VERSION = 20180605141404#“VERSION = 20180605141404您的迁移版本”
再次进行迁移
rake db:migrate:up VERSION = 20180605141404#“VERSION = 20180605141404您的迁移版本”