How to execute commands within Rake tasks?

老子叫甜甜 提交于 2019-12-22 01:27:22

问题


I have the rake tasks in my rails application. i want to run a commandline commands with in rake task. how can i do this. i tried by the following but fails

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

The above run command throws run method undefined & System command not throwing any errors but not executed.


回答1:


This links may help you run command line command into ruby ...

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

Calling shell commands from Ruby

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

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



回答2:


The sh Rake built-in is probably the best method:

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

The interface is similar to Kernel.system but:

  • it aborts if the return is != 0, so the above never reaches echo b
  • the command itself is echoed before the output



回答3:


run is used by Capistrano and other things for launching commands, but Rake often makes use of Kernel#system instead.

Your command might be being run, but not working. Why not make a wrapper shell script you can test independently, or try and kick off using the full path:

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

It would seem odd to have your script not in scripts/

The system call should return true on success. If this is not the case, either the script returned an error code, or the command could't be run.



来源:https://stackoverflow.com/questions/3668607/how-to-execute-commands-within-rake-tasks

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!