-
-
Save zachwaugh/521133 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby | |
# Load Rails | |
ENV['RAILS_ENV'] = ARGV[0] || 'production' | |
DIR = File.dirname(__FILE__) | |
require DIR + '/../config/environment' | |
# ... do stuff that requires using your rails models |
If you use the regular environment variable convention, you don't even need that much.
require 'config/environment'
puts Rails.env
...gives you...
$ ruby test_rails.rb
development
$ RAILS_ENV=production ruby test_rails.rb
production
Thanks for the tips, seems like there are a few ways to do it, but no one "right way". The use case for this is a script I just need to run once to do some maintenance or a script run regularly via cron. I'm thinking a rake task is probably the most appropriate place for this.
You just saved our lives..! Thank you so much for this... Had nearly pulled all of my hair out!
Is this current for Rails 3/4? It's my top Google result for "rails script load environment" so it might be worth updating.
#!/usr/bin/env ruby
require File.expand_path('../config/environment', __FILE__)
worked for me on Rails 3 (one-shot script located in Rails.root)
works on Rails 4 for me, but only when i run from the main Rails root. I'm sure it's based on a basic tweak I could make to have it run in a subdir, but i'm lazy today.
In Rails 4 or 3, you can try to copy the config from the file test/test_helper.rb
and change the path then everything should work correctly.
cool~
@lloeki your solution worked for me in rails 3.
FYI, I think that should be:
#!/usr/bin/env ruby
require File.expand_path('../config/environment', File.dirname(__FILE__))
# or
require "#{File.dirname(__FILE__)}/../config/environment"
Otherwise, the script will not work in the script
subdirectory.
👍 require File.expand_path('../config/environment', File.dirname(__FILE__))
works (Rails 5.2)
even better: require_relative '../config/environment'
my 2 cents
rails r hello.rb
executes hello.rb
as if it is a part of rails app
@giddie require File.expand_path('../config/environment', File.dirname(__FILE__))
worked for me too, thank you!
Is your script completely outside the Rails app? If it is a Rake task you can load the environment to work with models by doing this: http://pastie.org/1088485