gtd*_*gtd 404
假设相当新版本的Rails,您始终可以运行:
rake db:migrate:up VERSION=20090408054532
Run Code Online (Sandbox Code Playgroud)
其中version是迁移文件名中的时间戳.
编辑:在过去8年的某些时候(我不确定是什么版本)Rails添加了检查,如果它已经运行,它会阻止它运行.这由表中的条目表示schema_migrations
.要重新运行它,只需执行即可rake db:migrate:redo VERSION=20090408054532
.
Ori*_*rds 230
您可以直接从ruby文件中运行代码:
rails console
>> require "db/migrate/20090408054532_add_foos.rb"
>> AddFoos.up
Run Code Online (Sandbox Code Playgroud)
注意:较新版本的rails可能需要AddFoos.new.up
而不是AddFoos.up
.
另一种方法(没有IRB)依赖于require返回一个类名数组的事实:
script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
Run Code Online (Sandbox Code Playgroud)
请注意,如果你这样做,它可能不会更新schema_migrations
表,但似乎这就是你想要的.
Ben*_*ier 104
如果要运行特定迁移,请执行
$ rake db:migrate:up VERSION=20080906120000
Run Code Online (Sandbox Code Playgroud)
如果要多次运行迁移,请执行此操作
# use the STEP parameter if you need to go more than one version back
$ rake db:migrate:redo STEP=3
Run Code Online (Sandbox Code Playgroud)
如果你想运行一个单一的迁移多时间,做
# this is super useful
$ rake db:migrate:redo VERSION=20080906120000
Run Code Online (Sandbox Code Playgroud)
(您可以在迁移的文件名中找到版本号)
编辑:您也可以简单地重命名您的迁移文件,例如:
20151013131830_my_migration.rb
- > 20151013131831_my_migration.rb
然后正常迁移,这会将迁移视为一个新的迁移(如果您希望在远程环境(例如暂存)上迁移,那么您将无法进行迁移.
编辑2:您还可以在数据库中查看迁移条目.例如:
rails_c> q = "delete from schema_migrations where version = '20151013131830'"
rails_c> ActiveRecord::Base.connection.execute(q)
Run Code Online (Sandbox Code Playgroud)
rake db:migrate
然后将重新运行up
nuked迁移的方法.
chi*_*ode 25
如果你已经实现了change
这样的方法:
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
Run Code Online (Sandbox Code Playgroud)
您可以创建迁移的实例,并运行migrate(:up)
或migrate(:down)
上一个实例,如下所示:
$ rails console
>> require "db/migrate/20090408054532_add_part_number_to_products.rb"
>> AddPartNumberToProducts.new.migrate(:down)
Run Code Online (Sandbox Code Playgroud)
小智 17
这是再次运行此迁移文件"20150927161307_create_users.rb"的步骤
将该文件中的类复制并传递给控制台.
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps null: false end
end
end
end
Run Code Online (Sandbox Code Playgroud)创建类的实例CreateUsers
:c1 = CreateUsers.new
change
实例的方法:c1.change
小智 12
如果您遇到路径问题,可以使用
require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
Run Code Online (Sandbox Code Playgroud)
Dee*_*ale 12
截至rails 5
你也可以使用rails
而不是rake
Rails 3 - 4
# < rails-5.0
rake db:migrate:up VERSION=20160920130051
Run Code Online (Sandbox Code Playgroud)
Rails 5
# >= rails-5.0
rake db:migrate:up VERSION=20160920130051
# or
rails db:migrate:up VERSION=20160920130051
Run Code Online (Sandbox Code Playgroud)
如果你想从控制台运行它,这就是你要找的:
$ rails console
irb(main)> require "#{Rails.root.to_s}/db/migrate/XXXXX_my_migration.rb"
irb(main)> AddFoo.migrate(:up)
Run Code Online (Sandbox Code Playgroud)
我尝试了其他答案,但要求Rails.root
没有对我有用。
此外,.migrate(:up)
无论是否已经运行,part 都会强制迁移重新运行。当您已经运行迁移时,这很有用,通过弄乱数据库来撤消它并希望快速解决方案重新启动它。
方法1:
rake db:migrate:up VERSION=20080906120000
Run Code Online (Sandbox Code Playgroud)
方法2:
在Rails控制台中1.复制粘贴迁移类在控制台中(例如add_name_to_user.rb)2.然后在控制台中,键入以下内容
Sharding.run_on_all_shards{AddNameToUser.up}
Run Code Online (Sandbox Code Playgroud)
它完成了!!
归档时间: |
|
查看次数: |
136700 次 |
最近记录: |