Forum: Ruby on Rails How to execute shell command from Rails?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
rph (Guest)
on 2007-05-01 16:33
I'm caching API data from flickr and delicious on my site. I'm using a
ruby script that goes out and collects the data, and marshal's it. For
whatever reason, the cron job will not execute, so as a temporary
alternative, I've placed a "refresh" link that will update the cached
files. However, I cannot get this to execute on Dreamhost (works fine on
my windows machine). Here's what I'm trying:

def refresh_api_cache
  reload_cache(ENV['RAILS_ENV']) and redirect_to :back
end

private

def reload_cache(env)
  command = "ruby #{RAILS_ROOT}/script/custom/api_cache.rb"
  case env
    when /development|test/
      system command
    when /production/
      exec command
  end
end

If I change the production to be "system command" it won't crash, but it
also won't do anything. Just refreshes the page. I've also tried
directly running the script from it's location:

"exec ~/site.com/site/script/custom/api_cache.rb"

It seems as though "exec" is crashing, and I'm not sure what to put in
that situation. Any tips on how to execute shell commands from Rails???
Thanks!
Dustin F. (Guest)
on 2007-05-01 22:34
try


result = `ruby ~/site.com/site/script/custom/api_cache.rb`
Ben M. (Guest)
on 2007-05-01 22:46
(Received via mailing list)
You could move your script into lib and put its logic into a class with
a class method... then you can just call it from your rails code:
MyScriptClass.my_script.

Then, when you figure out your cron problem (see link [1] provided by
Dr. Nic in a response to another post), you can still call this, or you
could make a rake task to call it.

b

[1] http://kb.mediatemple.net/article.php?id=251
This topic is locked and can not be replied to.