Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

rake setup: Конфигурация окружения для работы плана на Ruby On Rails

Anna | 20.06.2014 | нет комментариев

Перечитывая блог Signals Vs Noise я наткнулся на увлекательную статью 

В ней рекомендовали сделать rake задачу, которая всецело подготовит ваше приложение к разработке позже клонирование из репозитория.

> `rake setup`

> All our apps has a rake setup task that’ll run bundler,
> create the databases, import seeds, and install any auxiliary
> software (little these days) or do any other setup. So when you git
> clone a new app, you know that “rake setup” will take care of you.

Я расскажу о том, как сделать сходственную задачу Ruby On Rails приложении.

Зайдем в папку с приложением и запустим

rake -T

Данная команда выведет список всех задач, доступных для rake.

rake about                            # List versions of all Rails frameworks and the environment
rake assets:clean                     # Remove old compiled assets
rake assets:clobber                   # Remove compiled assets
rake assets:environment               # Load asset compile environment
rake assets:precompile                # Compile all the assets named in config.assets.precompile
rake db:create                        # Create the database from DATABASE_URL or config/database.yml for the current Rails.env (use db:create:all to create all dbs in the config)
rake db:drop                          # Drops the database using DATABASE_URL or the current Rails.env (use db:drop:all to drop all databases)

Позже того, как мы добавим нашу задачу, она тоже появится в этом списке.

Создаем новую Rake task

Если вы хотите сделать собственную rake инструкцию у вас есть 3 варианта сделать это:

  1. Написать ее самосильно.
  2. Скопировать код с иной присутствующей задачи и изменить ее код.
  3. Воспользоваться Rails генератором.

Воспользуемся 3им пунктом.

$ rails g task setup hello_world

Он сделает скелет для нашей новой инструкции:
lib/tasks/setup.rake

namespace :setup do
  desc "TODO"
  task :hello_world => :environment do
  end
end

Hello World

Пройдемся по лексемам только что сделанной задачи

namespace :setup

Namespace, оно же пространство имен — это окружение, под которым будут сгруппированы задачи.
Примером из RoR дозволено привести rake db:migrate, где db тоже является namespace’ом

desc "TODO"

Изложение нашей задачи. Является необязательным компонентом, но если его опустить, то задача не будет отображаться в всеобщем списке при итоге командой rake -T

task :hello_world => :environment

:hello_world — имя задачи.
=> :environment — зависимости. Перед тем как запустить основную задачу, Rake запускает все зависимые задачи. В данном случае запустится инструкция rake environment, которая включена в сборку RoR и разрешает трудиться с операциями, зависящими от окружения, скажем, применение базы данных.

Поприветствовать мир через rake будет легко. Добавим в тело задачи puts 'Hello from rake!' и запустим ее

$ rake setup:hello_world
Hello from rake!

Invoke

Rake разрешает вызвать одну задачу из иной с поддержкой способа invoke, скажем:

Rake::Task['db:drop'].invoke

Это дает вероятность сделать ряд инструкций, которые с поддержкой встроенных Rails задач подготовят нашу базу к работе:

task :drop_database do
  puts "*** Drop old database ***"
  Rake::Task['db:drop'].invoke
end

task :create_database do
  puts "*** Create new database ***"
  Rake::Task['db:create'].invoke
end

task :migrate_database do
  puts "*** Do migrations ***"
  Rake::Task['db:migrate'].invoke
end

task :seed_database do
  puts "*** Seeding database ***"
  Rake::Task['db:seed'].invoke
end

task :create_test_database do
  puts "*** Setup test database ***"
  Rake::Task['db:test:prepare'].invoke
end

Мы удаляем ветхую базу, создаем новую, исполняем все миграции, добавляем исходные данные, и создаем базу для тестов. Это типовые действия, которые делает всякий разработчик при установке приложения.

Работа с моделями

Внутри задачи мы можем трудиться с моделями верно так же, как в любом месте Rails приложения.

В моем приложении существует модель User, в которой есть способ для добавления админской роли. В файлеseeds.rb так же присутствует запись для создания пользователя в базе. Мне необходимо сделать так, Дабы данный сделанный пользователь сразу
был менеджером, и мне не доводилось вызывать для него способ вручную через Rails консоль. Реализовать это легко:

task :set_admin_user do
  puts "*** Add admin role to first user ***"
  User.first.become_admin!
end

Собираем все совместно

Допишем в конце файла (вне блока namespace :setup) следующую инструкцию:

desc 'Configure the application for development.'
task :setup => :environment do
  Rake::Task['setup:drop_database'].invoke
  Rake::Task['setup:create_database'].invoke
  Rake::Task['setup:migrate_database'].invoke
  Rake::Task['setup:seed_database'].invoke
  Rake::Task['setup:set_admin_user'].invoke
  Rake::Task['setup:create_test_database'].invoke
end

Запуск!

$ rake setup
*** Drop old database ***
*** Create new database ***
*** Do migrations ***
...
...
*** Seeding database ***
*** Add admin role to first user ***
*** Setup test database ***

Все прошло как и было задумано! Поздравляю!

Завершение

Позже создания данной rake задачи на вас ложится еще одна ответственность — удерживать данный файл в актуальном состоянии, не забывайте про это.

И помните — вы не исключительный разработчик. Если какая-то деталь кажется вам явственной, то иной может утратить много времени
до того как осознает как с ней трудиться. Усердствуйте упростить разработку не только себе, но и коллегам.

 

Источник: programmingmaster.ru

 

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB