Forum: Ruby on Rails Simulating script/console for backend process

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.
A24e589de07cb769a71f28aead957a48?d=identicon&s=25 Duane Morin (dmorin)
on 2009-02-25 16:57
I could swear I've seen instructions before on how to do this, but I
can't find them.  I've got a backend process that runs in the same
environment as my webapp, injecting data into the model. In the
interests of not repeating myself I'd like to take advantage of the
app/models from my webapp as well as my config/database.yml information.

Normally when running the script by hand I'd go into script/console and
just do a 'require' on it.  This has served me quite nicely, actually.

But I've got to put this into a cron job and take the people out of the
loop.  Is there a "right" way to do that, and simulate all those
assumptions that the console has to make before running my script?  As
far as I can figure the console app does not have a standard "start up,
run X script and then exit" option.  I suppose I can just string
together all the necessary requires at the top of my script, manually
including the model files I need and such.  I'm just trying to figure
out if there's a better/cleaner way already out there.

[This feels like a FAQ and trust me, I'm googling as best I can and just
not finding it!  I hate asking when I feel like I should know the
answer...]
A91bd6cef23eb3516245a092e196c4da?d=identicon&s=25 Maurício Linhares (mauricio)
on 2009-02-25 17:21
(Received via mailing list)
Go to your RAILS_ROOT folder and then:

script/runner "here goes the name of your script" -e production

Read the help:

script/runner -h
Usage: script/runner [options] ('Some.ruby(code)' or a filename)

    -e, --environment=name           Specifies the environment for the
runner to operate under (test/development/production).
                                     Default: development

    -h, --help                       Show this help message.

You can also use runner as a shebang line for your scripts like this:
-------------------------------------------------------------
#!/usr/bin/env /home/mauricio/NetBeansProjects/something/script/runner

Product.find(:all).each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------


-
Maurício Linhares
http://alinhavado.wordpress.com/ (pt-br) | http://blog.codevader.com/
(en)



On Wed, Feb 25, 2009 at 12:57 PM, Duane Morin
92497f51734ed56687928d5fd68d870a?d=identicon&s=25 Sarah Mei (Guest)
on 2009-02-26 02:28
(Received via mailing list)
Generally, you want to put this sort of thing in a rake task (instead
of a script) and then your cron is just
cd /application_rails_directory; rake do_my_thing --RAILS_ENV=production
This topic is locked and can not be replied to.