How to execute shell command from Rails?

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


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

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 ~/”

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???


result = ruby ~/

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:

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.



This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs