rake setup: Базовая конфигурация Rails приложения

от автора

Доброго времени суток!

Перечитывая блог 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 задачи на вас ложится еще одна ответственность — держать этот файл в актуальном состоянии, не забывайте про это.

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

ссылка на оригинал статьи http://habrahabr.ru/post/180071/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *