How do I run a Ruby file in a Rails environment?
Ruby on-RailsRubyRuby on-Rails-3Ruby on-Rails Problem Overview
I want to run a Ruby file in the context of a Rails environment. rails runner almost does what I want to do, but I'd like to just give it the file name and arguments. I'm pretty sure this is possible since I've done it before. Can someone remind me how to do this?
Ruby on-Rails Solutions
Solution 1 - Ruby on-Rails
The simplest way is with rails runner
because you don't need to modify your script.
http://guides.rubyonrails.org/command_line.html#rails-runner
Just say rails runner script.rb
Solution 2 - Ruby on-Rails
Simply require environment.rb
in your script. If your script is located in the script
directory of your Rails app do
require File.expand_path('../../config/environment', __FILE__)
You can control the environment used (development/test/production) by setting the RAILS_ENV
environment variable when running the script.
RAILS_ENV=production ruby script/test.rb
Solution 3 - Ruby on-Rails
Runner runs Ruby code in the context of Rails non-interactively.
From rails runner
command:
Usage: 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 /Users/me/rails_project/script/rails runner
Product.all.each { |p| p.price *= 2 ; p.save! }
-------------------------------------------------------------
Solution 4 - Ruby on-Rails
This is an old question, but in my opinion I often find it helpful to create a rake task... and it's actually very easy.
In lib/tasks/example.rake
:
namespace :example do
desc "Sample description you'd see if you ran: 'rake --tasks' in the terminal"
task create_user: :environment do
User.create! first_name: "Foo", last_name: "Bar"
end
And then in the terminal run:
rake example:create_user
Locally this will be run in the context of your development database, and if run on Heroku it will be run while connected to your production database. I find this especially useful to assist with migrations, or modified tables.