动态执行迁移文件

时间:2010-12-09 08:13:44

标签: ruby-on-rails-3

我们如何从源代码动态执行mignation文件。意味着我们想要从控制器的动作执行迁移文件。我们怎么能这样做?

2 个答案:

答案 0 :(得分:3)

主要问题是我们不知道迁移文件的名称。我使用以下代码

ActiveRecord::Migrator.migrate("vendor/plugins/#{self.id.to_s}/lib/db/migrate/", nil)
Package::Rake.call('db:schema:dump')

Rake类有以下方法

def call(task, options={})
   options[:rails_env] = Rails.env
   args = options.map { |n,v| "#{n.to_s.upcase}='#{v}"}
   system "rake #{task} #{args.join(' ')} --trace >> #{Rails.root}/log/rake.log &"
end

希望这会帮助一些有类似问题的身体。

答案 1 :(得分:2)

这假设迁移是静态的,并且在应用服务器启动时位于db / migrate目录中:

您可以将迁移目录添加到config / application.rb中的自动加载路径,然后要求迁移文件在控制器内(或在配置初始化程序中)运行:

application.rb中

config.autoload_paths += %W(#{Rails.root}/db/migrate)

your_controller.rb

require '20101209102033_some_migration_file'
#....
SomeMigrationFile.up

我很想知道这里的用例是什么。看起来很疯狂!