如何在 Ruby on Rails 3 中一次恢复所有迁移?

Posted

技术标签:

【中文标题】如何在 Ruby on Rails 3 中一次恢复所有迁移?【英文标题】:How to revert all migrations at once in Ruby on Rails 3? 【发布时间】:2011-05-22 16:02:02 【问题描述】:

我试着跑了:

rake db:migrate VERSION=0

它会还原所有迁移除了最后一个

然后我尝试运行:

rake db:migrate:down VERSION=<timestamp_of_last_migration>

但它也没有恢复。为什么?

是否有一个命令可以同时运行所有down 方法?

【问题讨论】:

搜索如何回滚所有迁移,我偶然发现了这个问题。我只想说现在(Rails 3.2.9)rake db:migrate VERSION=0 似乎工作正常,正在恢复所有迁移。 这个问题似乎是错误的或过时的。 rake db:migrate VERSION=0 回滚每次迁移,包括第一个 【参考方案1】:

如果您的数据库仅与该项目相关,并且您尝试撤消迁移中的所有内容,我只需删除数据库,然后运行 ​​rake db:create。

那么你就准备好了一个空数据库。

或者您尝试运行关闭脚本还有其他原因吗?

【讨论】:

这就是我最终所做的。但是,我仍然想知道为什么上面的命令不起作用...... 浏览了 rails rake 任务,看起来 rake db:drop db:create 是唯一真正的选择。我想说迁移不会让你回到虚无的原因是因为它们是为了在迁移内部移动。未重置为零。【参考方案2】:

您可以查看此列表。

也许这对你有帮助

rake db:create[:all]: If :all not specified then create the database defined in config/database.yml for the current RAILS_ENV. If :all is specified then create all of the databases defined in config/database.yml.
rake db:fixtures:load: Load fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y
rake db:migrate [VERSION=n]: Migrate the database through scripts in db/migrate. Target specific version with VERSION=n
rake db:migrate:redo [STEP=n]: (2.0.2) Revert the database by rolling back "STEP" number of VERSIONS and re-applying migrations.
rake db:migrate:reset: (2.0.2) Drop the database, create it and then re-apply all migrations. The considerations outlined in the note to rake db:create apply.
rake db:reset: Drop and re-create database using db/schema.rb. The considerations outlined in the note to rake db:create apply.
rake db:rollback [STEP=N]: (2.0.2) Revert migration 1 or n STEPs back.
rake db:schema:dump: Create a db/schema.rb file that can be portably used against any DB supported by AR
rake db:schema:load: Load a schema.rb file into the database
rake db:sessions:clear: Clear the sessions table
rake db:sessions:create: Creates a sessions table for use with CGI::Session::ActiveRecordStore
rake db:structure:dump: Dump the database structure to a SQL file
rake db:test:clone: Recreate the test database from the current environment's database schema
rake db:test:clone_structure: Recreate the test databases from the development structure
rake db:test:prepare: Prepare the test database and load the schema
rake db:test:purge: Empty the test database

【讨论】:

【参考方案3】:

尝试:

rake db:migrate:down VERSION=<timestamp_of_first_migration>

这将为您的第一次迁移运行 self.down,基本上清除所有内容。至少,它对我有用!

【讨论】:

【参考方案4】:

还有一种方法:

rake db:rollback STEP=100

这将恢复最近 100 次迁移

取自http://guides.rubyonrails.org/migrations.html#rolling-back

【讨论】:

以上是关于如何在 Ruby on Rails 3 中一次恢复所有迁移?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:如何配置设计邮件程序?

Ruby on Rails 活动记录查询(.each、.collect、.map ...?)

如何在 ruby​​ on rails 中通过 websocket 发送保持活动的数据包

如何在 Ruby on Rails 3.1 中禁用资产管道(链轮)消息的日志记录?

如何解决 ruby​​ on rails 版本差异(向后/向前兼容性)

通过单击 Ruby on Rails 中的按钮生成表单