Some days ago, I came across a requirement where I needed to run some rails code at the end of deployment.
We use the
Capistrano tool for the deployment, and it has great support for hooks like
after 'deploy:published', 'some_task'
Most of the examples show some system commands, since
Capistrano is a deployment tool, and isn’t running rails.
But I didn’t know that, being new to rails ecosystem.
So at first, at just called a background job that needed to talk to third party system and get some data, once the rails server is up.
I was met with
uninitialized constant error.
After looking around similar scripts in other projects, I came across
rails runner (
rails r) also works.
It is like
rails c, as in it does not run the server, but loads all the rails environment (which is what I wanted)
rails c, it runs the rails code non-interactively.
Couple of examples :
bin/rails runner "Model.long_running_method"
bin/rails runner lib/code_to_be_run.rb
bin/rails runner -e staging "Model.long_running_method"to run it under specific environment.
You can read more in the rails documentation