Зарегистрируйтесь, чтобы продолжить обучение

Rake Ruby On Rails

Программа урока

  • Вспоминаем Rake
  • Rake в Rails (команды)
  • Собственные Rake задачи в Rails
  • FileUtils в Rake
  • FileList в Rake

Используемые команды

bin/rails console # запуск консоли
bin/rails server # запуск сервере
bin/rails generate
bin/rails generate scaffold
bin/rails destroy
bin/rails dbconsole # запуск консоли БД
bin/rails runner 'pp User.all' # запуск команды


bin/rails g scaffold User name
bin/rails db:migrate
bin/rails db:seed

bin/rails runner 'pp User.first'
bin/rails runner lib/user.rb

# Rails команды могут запускаться через Rake
# Но не все rails команды могут так запускаться
bin/rails about
bin/rake about

bin/rake dbconsole
# Running via Spring preloader in process 240506
# rake aborted!
# Don't know how to build task 'dbconsole' (See the list of available tasks with `rake --tasks`)

bin/rake assets:precompile
bin/rake assets:clobber
bin/rake assets:clean
bin/rails notes  # вывод всех пометок "TODO" и др. в проекте
bin/rake stats  # статистика проекта, количество строк кода, классов и т.д.
bin/rake timezones

bin/rake time:zones:all

bin/rails users:create

Создание тасок

namespace :users do
  desc 'Creates 5 users'
  task :create => :environment do
    print "Task started...\n"

    5.times do |i|
      User.create(name: "Alice #{i + 1}")
      print '.'
    end

    print "\n...done\n"
  end

  # bin/rails users:update name=vasya
  desc 'Updates user name'
  task update: :environment do
    print "Task started...\n"

    User.find(1).update(name: ENV['name'])

    print "\n...done\n"
  end
end

namespace :users do
  # bin/rails 'users:update[vasya]'
  desc 'Updates user name'
  task :update, [:name] => :environment do |t, args|
    name = args[:name]
    print "Change user name to #{name}"

    User.find(1).update(name: name)

    print "\n...done\n"
  end
end

namespace :manipulate_files do
  desc "Creates file in tmp folder"
  task :create do
    touch "tmp/rake_test.file.rb"
  end

  desc "Show files list"
  task :show do
    # FileList - хелпер Rake
    # https://docs.ruby-lang.org/en/2.2.0/Rake/FileList.html
    FileList.new('config/environments/*.rb') do |file|
      pp file.exclude(/dev/)
    end
  end
end
bin/rails g task
bin/rails g task manipulate_files create
# Вызов таски с аргументами
bin/rails users:update name=vasya
bin/rails 'users:update[vasya]'

Самостоятельная работа

  • Создайте Rake-задачу utils:encode_base64, которая принимает строку в качестве аргумента и выводит её закодированное значение в Base64.

    bin/rails utils:encode_base64['Привет, мир!']
    0J/RgNC40LLQtdGCLCDQvtCx0LvQsNGBIQ==
    
  • Создайте Rake-задачу utils:decode_base64, которая принимает строку, закодированную в Base64, и выводит её декодированное значение.

    bin/rails utils:decode_base64['0J/RgNC40LLQtdGCLCDQvtCx0LvQsNGBIQ==']
    Привет, мир!
    
Пример реализации
require 'base64'

namespace :utils do
desc "Encode the given text to Base64"
task :encode_base64, [:text] => :environment do |_, args|
  if args[:text].nil?
    puts "Please provide a string to encode."
  else
    encoded = Base64.strict_encode64(args[:text])
    puts encoded
  end
end

desc "Decode the given Base64 string"
task :decode_base64, [:base64] => :environment do |_, args|
  if args[:base64].nil?
    puts "Please provide a Base64 string to decode."
  else
    begin
      decoded = Base64.decode64(args[:base64])
      puts decoded
    rescue ArgumentError => e
      puts "Decoding error: #{e.message}"
    end
  end
end
end

Дополнительные материалы

  1. Rails Guides — The Rails Command Line
  2. How to generate rake task
  3. Rake

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff