Rake задача для добавления данных по умолчанию - PullRequest
5 голосов
/ 24 сентября 2010

Я видел некоторые приложения, в которые было включено несколько граблей для загрузки данных. Я не говорю о начальных данных, я знаю о db / seed.rb, вместо этого я имею в виду такие данные, как пользователи по умолчанию и базовые записи, которые помогают мне заполнить заявку на что-то, на что можно посмотреть. Я не хочу использовать db: fixtures: load, потому что у меня нет никакого контроля над этим ...

Я бы хотел получить такие рейковые задания:

rake myapp:data:delete
rake myapp:data:load
rake myapp:data:reload

Если задача «удалить» с граблями удалит все данные, которые я указал в задаче с граблями, приложение «загрузить» загрузит данные по умолчанию из задачи в приложение, а задача «перезагрузить» удалит все данные, а затем загрузить его в приложение. Как мне сделать что-то подобное?

Если бы вы могли привести мне пример, где у меня есть модель с именем 'Контакт' и несколько полей - в основном, как добавить или удалить данные из этих полей в задаче rake, я ДЕЙСТВИТЕЛЬНО оценил бы это!

Просто чтобы дать вам представление, я в основном использовал бы эти грабли, когда переходил с одного компьютера на другой для разработки. Я не хочу вручную вводить записи по умолчанию (например, мой пользователь для входа в систему), поэтому я могу просто сделать rake myapp: data: reload - это будет после выполнения rake db: schema: load

Спасибо,

BN

1 Ответ

7 голосов
/ 24 сентября 2010

Создайте файл lib / tasks / data.rake и напишите следующий код:

require File.join(File.dirname(__FILE__), '../../config/environment')
require 'database_cleaner'

namespace :myapp do
  namespace :data do

    task :delete do
      DatabaseCleaner.strategy = :truncation
      DatabaseCleaner.clean
    end

    task :load do
      require 'db/data.rb'
    end

    task :reload do
      Rake::Task['myapp:data:delete'].invoke
      Rake::Task['myapp:data:load'].invoke
    end

  end
end

Итак, теперь вы определили свои грабли.Я использую gem database_cleaner, поэтому вам нужно установить его:

sudo gem install database_cleaner

Теперь rake myapp:data:load в основном загружает данные из файла с именем db/data.rb.Вы можете назвать его как угодно, если только используете имя файла в задаче rake, или можете использовать более одного файла, если хотите ... Так что создайте файл db/data.rb и поместите весь необходимый код ...

User.create(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...