Как выполнять команды в задачах Rake

У меня есть rake-задачи в моем приложении rails. Я хочу запустить команды командной строки с помощью команды rake. как я могу это сделать. Я попытался выполнить следующие действия, но не выполнил

desc "Sending the newsletter to all the users"
task :sending_mail do
  run "cd #{RAILS_ROOT} && ar_sendmail -o -t NewsLetters -v"
  system "cd #{RAILS_ROOT} && ar_sendmail -o -t NewsLetters -v &"
end

Вышеуказанная команда запуска запускает метод undefined, а системная команда не выдает никаких ошибок, но не выполняется.

Я хочу сделать это.. может кто-нибудь, пожалуйста, поправьте меня на это. как можно правильно определить команды командной строки

Ответы

Ответ 2

sh Rake встроенный, вероятно, лучший метод:

task(:sh) do
  sh('echo', 'a')
  sh('false')
  sh('echo', 'b')
end

Интерфейс похож на Kernel.system, но:

  • он прерывается, если возврат равен!= 0, поэтому выше никогда не достигает echo b
  • сама команда будет эхом перед выходом

Ответ 3

run используется Capistrano и другими функциями для запуска команд, но Rake часто использует Kernel#system вместо этого.

Ваша команда может быть запущена, но не работает. Почему бы не сделать оболочку оболочки script, вы можете протестировать самостоятельно или попробовать и начать с полного пути:

newsletter_script = File.expand_path('ar_sendmail', RAILS_ROOT)

if (File.exist?(newsletter_script))
  unless (system(newsletter_script + ' -o -t NewsLetters -v &'))
    STDERR.puts("Script #{newsletter_script} returned error condition")
  end
else
  STDERR.puts("Could not find newsletter sending script #{newsletter_script}")
end

Казалось бы странным иметь ваш script не в scripts/

Вызов system должен возвращать true при успешном завершении. Если это не так, либо script возвращает код ошибки, либо команда не может быть запущена.