我们如何从源代码动态执行mignation文件。意味着我们想要从控制器的动作执行迁移文件。我们怎么能这样做?
答案 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
我很想知道这里的用例是什么。看起来很疯狂!