1

我的项目在 Rails 3.2 和 refinerycms v 2.0.10 上

我刚刚生成了一个新引擎并运行了我的 bundle 和 rails generate 命令,以及我的迁移。现在,根据文档,我需要运行 db:seed 但我不想在应用程序级别执行 db:seed 因为我有几个其他引擎并且我不想重新播种它们。

它与这个问题有关: Rails引擎/如何使用种子? 但答案是在应用程序级别运行 db:seed 。

那么我该怎么说 rake myNewEngine:db:seed 呢?我知道可以做到,但我的 google fu 显然太弱了,无法挖掘它。

4

2 回答 2

2

您可以生成自己的 rake 任务。创建一个 your_engine.rake 文件并确保它已加载到您的 Rakefile 中。

namespace :your_engine do
  namespace :db do
    task :seed do
      YourEngine::Engine.load_seed
    end
  end
end
于 2013-08-27T04:06:40.330 回答
0

编辑 YOUR_ENGINE/lib/tasks/YOUR_ENGINE_tasks.rake

namespace :db do
  namespace :YOUR_ENGINE do
    desc "loads all seeds in db/seeds.rb"
    task :seeds  => :environment do
      YOUR_ENGINE::Engine.load_seed
    end

    namespace :seed do
        Dir[Rails.root.join('YOUR_ENGINE', 'db', 'seeds', '*.rb')].each do |filename|
          task_name = File.basename(filename, '.rb')
          desc "Seed "      task_name      ", based on the file with the same name in `db/seeds/*.rb`"
          task task_name.to_sym => :environment do
            load(filename) if File.exist?(filename)
          end
        end
      end
  end
end 

然后在您的主应用程序中,您可以执行自定义种子命令,单独执行任何种子文件

$rake -T | grep YOUR_ENGINE
rake db:YOUR_ENGINE:seed:seed1            # Seed seed1, based on the file with the same name in `db/seeds/*.rb`
rake db:YOUR_ENGINE:seeds                 # loads all seeds in db/seeds.rb
于 2018-07-11T16:38:14.900 回答