Rails как запустить задачу rake

98

Как мне запустить этот rake-файл в терминале / консоли?

мой statistik.rake в lib / tasks

desc "Importer statistikker"
namespace :reklamer do
  task :iqmedier => :environment do
    ...
  end
  task :euroads => :environment do
    ...
  end
  task :mikkelsen => :environment do
    ...
  end
  task :orville => :environment do
    ...
  end
end
Rails новичок
источник

Ответы:

134

Вы можете запускать задачи Rake из своей оболочки, запустив:

rake task_name

Для запуска из Ruby (например, в консоли Rails или другой задаче Rake):

Rake::Task['task_name'].invoke

Чтобы запустить несколько задач в одном пространстве имен с одной задачей, создайте следующую новую задачу в своем пространстве имен:

task :runall => [:iqmedier, :euroads, :mikkelsen, :orville] do
  # This will run after all those tasks have run
end
Эндрю Маршалл
источник
1
Как сгребать все задачи сразу или мне нужно изменить пространство имен на задачу?
Новичок в Rails
1
Если вы хотите запустить все задачи сразу, сделайте task: all => [: a,: b,: c], а затем запустите rake reklamer: all
Спайк Гроним
1
Это не входило в ваш вопрос, но вам нужно было бы создать новую задачу, которая будет вызывать каждую из них, для чего есть сокращение. Смотрите мой обновленный ответ.
Эндрю Маршалл,
1
@Andrew Marshall, кстати, вы можете использовать, task :runall => Rake::Task.tasksесли хотите запускать все задачи. Но эту строку нужно объявить после всех заданий.
Василий Ермолович
Куда должна идти задача: runall =>?
Rails новичок
25
Rake::Task['reklamer:orville'].invoke

или

Rake::Task['reklamer:orville'].invoke(args)
Люк В
источник
Этот подход будет работать, но о «правильном» способе объединения задач raks ответил @andrew-marshall.
Том Харрисон
3
дайте ссылку, если вы собираетесь сказать что-то вроде «правильный» способ ... ». мой ответ был ответом на исходный вопрос.
Люк W
3
В качестве теоретического теста я попытался запустить, Rake::Task['db:seed'].invokeно он не запустился, сказав: «Не знаю, как построить задачу 'db: seed'»
lulalala
22

Вы пробовали rake reklamer:iqmedier?

Мои пользовательские задачи rake находятся в каталоге lib, а не в lib / tasks. Не уверен, что это имеет значение.

Чарли Мезак
источник
1
Я хочу запускать все задачи сразу
Rails новичок
14

Иногда ваши задачи с граблями не загружаются в консоль, в этом случае вы можете попробовать следующие команды

require "rake"
YourApp::Application.load_tasks
Rake::Task["Namespace:task"].invoke
Bloomberg
источник
Эти цитаты плохие, но я не могу их редактировать, потому что это слишком маленькое изменение!
nroose
Хотя это не настоящий ответ на заданный вопрос. Это то, что я искал и решил свою проблему (YourApp :: Application.load_tasks). Благодарность!
Деннис ван де Хоеф,
4

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

Запускаем rake --tasksна терминале.

В нем будут перечислены следующие задачи:

rake gobble:dev:prime             
rake gobble:dev:reset_number_of_kits                                    
rake gobble:dev:scrub_prod_data

Затем вы можете запустить свою задачу с помощью: rake gobble:dev:primeкак указано.

Кака Руто
источник
1

В рельсах 4.2 описанные выше методы не работали.

  1. Идите в Терминал.
  2. Измените каталог на место, где находится ваш rake-файл.
  3. запустить rake task_name.
  4. В приведенном выше случае запустите rake iqmedier - запустится только задача iqmedir.
  5. run rake euroads - выполнит только задачу euroads.
  6. Чтобы запустить все задачи в этом файле, назначьте следующее внутри того же файла и запустите rake all

    task :all => [:iqmedier, :euroads, :mikkelsen, :orville ] do #This will print all the tasks o/p on the screen 
    end
    
хари
источник