Ruby On Rails

Теория: Rake

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

  • Вспоминаем 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]'

Рекомендуемые программы