Scheduled tasks on rails

Hi,

I’m developing a rails app that needs to run scheduled tasks, does someone knows how can I do that?

I’ve tried backgroundrb, but without success…

Looks like backgroundrb is outdated with my version of rails (3.0.3), Does anybody confirms?

Thanks in advance,

Not sure about backgroundrb, but you could also check out delayed_jobs
(though it sounds like it won't be updated for a while), Resque (if
your requirements are more high-end), or the top answer here:

http://stackoverflow.com/questions/897605/ruby-on-rails-how-to-run-things-in-the-background

But if it's just a scheduled task, how about plain old cron? Or see
more discussion (and more gems) here:

http://stackoverflow.com/questions/3632129/is-railss-delayed-job-for-cron-task-really

Fun!

Douglas,

I have been using cron tasks that invoke curl that invokes the routes that perform the periodic tasks for several years. This works on all versions of Rails (of course you have to be running *nix). I gave up on using Rails plugins, etc. because every time I did an update, the darned things broke (and now they seem to have gone away entirely).

Donz

Do you wrap some security on those routes at the web-server level or
in the application? If you secure at the webserver, do you do it by ip
address or user/password

O.

Quoting Owain <owain.mcguire@gmail.com>:

> Douglas,
>
> I have been using cron tasks that invoke curl that invokes the routes
> that perform the periodic tasks for several years.

Do you wrap some security on those routes at the web-server level or
in the application? If you secure at the webserver, do you do it by ip
address or user/password

Look at local_request? method in ActionController.

HTH,
  Jeffrey

Look at local_request? method in ActionController.

Jeffrey,

Certainly another option but I would prefer not to have "network
config" logic in my application if I can help it. If you want to
manage all of the housekeeping jobs from a remote curl or put in load
balancers you would need to change code. I prefer to protect
resources like this in my httpd.conf that defines the server and
network environment.

O.

Quoting Owain <owain.mcguire@gmail.com>:

>
> Look at local_request? method in ActionController.
>

Jeffrey,

Certainly another option but I would prefer not to have "network
config" logic in my application if I can help it. If you want to
manage all of the housekeeping jobs from a remote curl or put in load
balancers you would need to change code. I prefer to protect
resources like this in my httpd.conf that defines the server and
network environment.

Whatever. Then the question is one for the Apache forums, not Rails.

Jeffrey

Whatever. Then the question is one for the Apache forums, not Rails.

Indeed. However, it is of interest to solicit views as to how other
people approach this problem. Cron with Curl looks a simple and
sensible way of automation. What's Donz's approach?

O.

I restrict the ip to 0.0.0.0 (localhost) so no one outside the server can use the route. If someone is able to hack into the server itself, all bets are off. :frowning: . So far I haven't had any problems, and the site has been up for 3.5 years so far.

local_request? would work too.

Donz

I need to do something similar -- keep all but cron requests from the same server from tripping a particular method in my controller. Can you elaborate on how local_request? could be used for that purpose? I looked at the documentation, and it appears to be a test you can run on an exception, but I'm not clear how to employ it -- what would I use to raise the exception in the first place?

Is it as simple as this?

def my_api_method
  send_out_a_bunch_of_mail if local_request?
end

My gut tells me no, there's an object missing here.

Walter

Quoting Walter Lee Davis <waltd@wdstudio.com>:

>I restrict the ip to 0.0.0.0 (localhost) so no one outside the
>server can use the route. If someone is able to hack into the
>server itself, all bets are off. :frowning: . So far I haven't had any
>problems, and the site has been up for 3.5 years so far.
>
>local_request? would work too.

I need to do something similar -- keep all but cron requests from
the same server from tripping a particular method in my controller.
Can you elaborate on how local_request? could be used for that
purpose? I looked at the documentation, and it appears to be a test
you can run on an exception, but I'm not clear how to employ it --
what would I use to raise the exception in the first place?

Is it as simple as this?

def my_api_method
  send_out_a_bunch_of_mail if local_request?
end

My gut tells me no, there's an object missing here.

The object is an ActiveController instance, i.e. an HTTP request handler. The
method checks the IP address of the requester.

Jeffrey

Thank you guys!
I'm using cron tasks like djangst sugested and it's working well.
And yes, I agree with Donald: plugins have this update problem...
So I'll try the Donald's way as well.
Big hug,
Douglas Fonseca