Вопрос

У меня есть задачи на граблях в моих рельсах. Я хочу запустить команды командной строки с помощью задачи 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 & System не бросает никаких ошибок, но не выполняется.

Это было полезно?

Решение

Эта ссылка может помочь вам запустить команду командной строки в Ruby ...

http://zhangxh.net/programming/ruby/6-ways-to-run-shell-commands-in-ruby/

Вызов команд Shell из Ruby

http://blog.jayfields.com/2006/06/ruby-kernel-system-exec-and-x.html.

%x[command].each do |f|
  value = f
end

Другие советы

То sh Райк встроенный Вероятно, лучший метод:

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

Интерфейс аналогичен Kernel.system но:

  • Это прерывается, если возврат! = 0, так что вышесказанное никогда не достигает echo b
  • Сама команда повторяется до вывода

run используется Capistrano и другими вещами для запуска команд, но грабли часто используют Kernel#system вместо.

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

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

Казалось бы странным, чтобы ваш скрипт не в scripts/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top