关于RubyonRails:如何在rake任务中执行命令?

How to execute commands within Rake tasks?

我在Rails应用程序中有rake任务。我想用in rake任务运行一个命令行命令。我该怎么做呢?我尝试了以下方法,但失败了

1
2
3
4
5
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

以上运行命令引发未定义的运行方法&;系统命令未引发任何错误,但未执行。


雷克建筑物很可能是最好的方法:

1
2
3
4
5
task(:sh) do
  sh('echo', 'a')
  sh('false')
  sh('echo', 'b')
end

接口与EDOCX1&6类似,但:

  • 如果回报是真的=0,so the above never reaches EDOCX1〕〔7〕
  • 在输出之前,命令自身被回收。


卡宾斯塔诺及其他东西用于发射命令,但经常使用Kernel#system

你的命令可能是运行,但不工作。为什么不写一个书写,你可以独立测试,或者试着用完整的路径去踢:

1
2
3
4
5
6
7
8
9
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/

呼唤应归还true成功。如果这不是个案,那么剧本就返回错误的代码,否则指挥官就无法运行。


这条链接可以帮助你运行命令线路进入红宝石

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

呼叫红宝石壳牌

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

ZZU1