我正试图在我的rails应用程序中运行一大堆迁移。我怎样才能做到这一点?我不希望在它之前或之后运行任何迁移。感谢。
答案 0 :(得分:156)
rake db:migrate:redo VERSION=xxxxxxx
,但这会运行down
,然后是up
步骤。您可以暂时注释掉向下步骤。
答案 1 :(得分:69)
rake db:migrate:up VERSION=1234567890
类似rake db:migrate:down
来执行特定的迁移。您可以使用rake -T
获取可用的佣金任务列表。
答案 2 :(得分:24)
我必须运行一个已更改的迁移,并且需要独立于所有其他迁移重新运行。启动控制台并执行此操作:
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
更有用的是,这可以用于rake任务等。
答案 3 :(得分:10)
rake db:migrate:up VERSION=version_no
将迁移(添加)特定迁移脚本
rake db:migrate:down VERSION=version_no
将删除特定的迁移脚本
答案 4 :(得分:9)
rake db:migrate VERSION=20098252345
尝试一下。
答案 5 :(得分:3)
通过上面的korch扩展回答,require
对我不起作用,但是load
做了。具体来说,对于迁移文件:
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
在控制台中键入
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
为我工作。
> Race.new.min_quantity # => 0
这是针对ruby 1.9.3p484(2013-11-22修订版43786)[x86_64-linux]和Rails 3.2.13。
答案 6 :(得分:3)
rake db:migrate:redo version='xxxx'
请记住在xxxx周围加上引号,xxxx是迁移的时间戳(或迁移ID)。
您可以使用
检查之前迁移的时间戳(迁移ID)rake db:migrate:status
答案 7 :(得分:2)
为此添加我的2¢,因为我遇到了同样的问题:
如果您绝对想要在不创建新迁移的情况下再次运行迁移,则可以执行以下操作:
rails dbconsole -p
devdb=# delete from public.schema_migrations where version = '20150105181157';
rails会“忘记”它运行20150105181157的迁移。现在当你运行db:migrate时,它将再次运行它。
但这几乎总是一个坏主意。它可能有意义的一个例子是,如果你有一个开发分支,你还没有充实你的迁移,并希望在开发中添加一些东西。但即便如此,最好还是双向迁移,这样才能正确地回滚和重试。
答案 8 :(得分:1)
必须有一种方法可以通过控制台运行迁移类。我似乎无法使迁移代码可识别。
但是,正如评论所示,最好按顺序运行迁移。使用:
rake db:migrate VERSION=##########
将代码复制并粘贴到迁移到脚本/控制台?
答案 9 :(得分:1)
我有一个实用程序方法,使开发非常容易。我发现它可以帮助我避免创建过多的迁移 - 通常我会在迁移之前修改迁移。
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
答案 10 :(得分:0)
我在开发过程中使用这种技术时,我将迁移量大幅下降,而且我不希望在此过程中向下迁移并丢失任何数据(特别是当我导入旧版本时)需要很长时间的数据,我不想再次重新导入)。
这是100%的hackish,我绝对不会建议在制作中这样做,但它会做到这一点: