как настроить таргетинг на seed.rb в движке, чтобы избежать заполнения всего моего приложения?

Мой проект на Rails 3.2 и Refinerycms v 2.0.10

Я только что сгенерировал новый движок и запустил команды генерации пакета и рельсов, а также свою миграцию. Теперь, согласно документам, мне нужно запустить db:seed, но я не хочу выполнять db:seed на уровне приложения, потому что у меня есть несколько других движков, и я не хочу их повторно заполнять.

это связано с этим вопросом: Rails engine/Как использовать seed? но ответ заключается в запуске db:seed на уровне приложения.

Итак, как бы я сказал что-то вроде rake myNewEngine:db:seed ? Я знаю, что это можно сделать, но мой гугл-фу, по-видимому, слишком слаб, чтобы выкопать его.


person rakitin    schedule 27.08.2013    source источник


Ответы (2)


Вы можете просто создать свою собственную задачу rake. Создайте файл your_engine.rake и убедитесь, что он загружен в ваш Rakefile.

namespace :your_engine do
  namespace :db do
    task :seed do
      YourEngine::Engine.load_seed
    end
  end
end
person polmiro    schedule 27.08.2013
comment
спасибо @polmiro. интересно, нет ли решения, требующего меньших накладных расходов. Я плохо разбираюсь в том, как работает рейк. - person rakitin; 28.08.2013

Отредактируйте файл 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
person Luis Carlos Mejia    schedule 11.07.2018