我的铁路应用程序中有耙子任务。我想在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

上面的运行命令抛出运行方法未定义和系统命令不丢弃任何错误,但未执行。

有帮助吗?

解决方案

其他提示

sh 耙子内置 可能是最好的方法:

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

该界面类似于 Kernel.system 但:

  • 如果回报为!= 0,则中止上述 echo b
  • 在输出之前对命令本身进行回声

run Capistrano和其他东西用于启动命令,但Rake经常使用 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