Ruby on rails Rails迁移不会更改schema.rb
我有一个rails迁移没有应用到schema.rb。迁移应创建一个表:Ruby on rails Rails迁移不会更改schema.rb,ruby-on-rails,ruby-on-rails-4,database-migration,rails-migrations,Ruby On Rails,Ruby On Rails 4,Database Migration,Rails Migrations,我有一个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 :u
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
class CreateUserGraphs
我做了db:重置。然后我尝试了rake db:migrate:up VERSION=123123(这就是迁移)。我在我的“开发”环境中
为什么迁移不会影响schema.rb?来自:
rakedb: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通过比较上次运行迁移的时间戳并查看是否有更新的迁移来检查需要运行哪些迁移
如果新迁移的版本是
123123
,则不会运行,因为该数字不大于当前时间戳(例如20131209170300
)。找到了获取错误描述的方法。
运行rake db:迁移:重置并接收
`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`'
我也有同样的问题。。。原来是因为我编辑了迁移文件的名称以使其看起来更整洁。确保不要像我那样删除迁移文件标题中的时间戳
我删除了迁移文件、模型、控制器和相关测试,并重新生成了控制器和模型,解决了问题。我也遇到了同样的问题。我在开发环境中工作(与Passenger和Apache一起)。生产和开发环境使用相同的数据库 当我运行
rakedb:migrate
时,数据库已更改,但架构未更新。然后我运行rakedb:migraterails\u ENV=development,现在模式被更新了
rails/rake似乎对我的环境感到困惑。Passenger为这个站点设置了一个开发环境,但是,
rake-about
说“环境生产” 首先,您尝试向下迁移
rake db:migrate:down VERSION=201806051141404#“VERSION=201806051141404您的迁移版本”
然后再次启动您的迁移
rake db:migrate:up VERSION=2018060514104#“VERSION=2018060514104您的迁移版本”您是否尝试先删除数据库<代码>rake db:drop db:create db:migrate这是一个很有用的方法。
rake db:drop db:create
与rake db:reset
有何不同?rake db:reset
在没有迁移的情况下运行db:create db:schema:load db:seed
。我认为db:migrate:reset
会满足您的需要。@Vucko,请添加此建议作为问题的有效答案;)@马尔扎鲍尔可以:)