Running scripts from a controller

Hello,
I am developing an app that needs to run a scripts outside of MVC. I
have a Ruby script called 'test.rb' located in 'public/tools' that I
would like to initiate from a controller. In my controller I tried the
following:

test = `/tools/test.rb`

...but with no result. Does anybody know the correct path or method to
do this?

Thanks,
- Jeff Miller

Use the RAILS_ROOT constant to get the path for the root of your app

Fred

hmm... I can't seem to get the right path... It keeps telling me this:

RAILS_ROOT: ./script/../config/..

I've tried a few different paths and different ways to call it:
require "#{RAILS_ROOT}/public/tools/grab_ad.rb"
grab_ad = `#{RAILS_ROOT}/public/tools/grab_ad.rb`

none of them work...

Any suggestions?

Thanks,
- Jeff

hmm... I can't seem to get the right path... It keeps telling me this:

RAILS_ROOT: ./script/../config/..

I've tried a few different paths and different ways to call it:
require "#{RAILS_ROOT}/public/tools/grab_ad.rb"
grab_ad = `#{RAILS_ROOT}/public/tools/grab_ad.rb`

Have you printed these to the console/log/etc... to see if it looks
vaguely sane ? Are you changing the current directory anywhere ? Also
look into File.expand_path which resolves all those fiddly .. and .

Fred

I'm still new to RoR... I'm not sure exactly how to go about what you're
talking about... However, I found that it works perfectly if I just use
grab_ad = `grab_ad.rb` IF grab_ad.rb is located in the root of my app.
However, when I try to put it in root\public, it doesn't work at all.
I'm going to keep trying to experiment...

Thanks,
- Jeff

Have you done either of these:

chmod +x grab_ad.rb

-or-

grab_ad = `ruby #{File.join(RAILS_ROOT, '/public/tools/grab_ad.rb')}`

BTW: Putting anything executable in a publicly accessible location is
a security risk.

Jeff Miller wrote:

Hello,
I am developing an app that needs to run a scripts outside of MVC. I
have a Ruby script called 'test.rb' located in 'public/tools' that I
would like to initiate from a controller. In my controller I tried the
following:

test = `/tools/test.rb`

...but with no result. Does anybody know the correct path or method to
do this?

Thanks,
- Jeff Miller

Move your file to the lib directory:

lib/test.rb

Add

require 'test'

to config/environment.rb

Your Ruby code from file test.rb is now available in your application.

Stephan