Skip to content

Instantly share code, notes, and snippets.

@zachwaugh
Created August 12, 2010 15:19
Show Gist options
  • Star 20 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save zachwaugh/521133 to your computer and use it in GitHub Desktop.
Save zachwaugh/521133 to your computer and use it in GitHub Desktop.
Loading rails environment in a script
#!/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
@abachman
Copy link

#!/usr/bin/env ruby
require File.expand_path('../../config/boot',  __FILE__)

... is easier. It's the preamble to most of the default script/_____ scripts in Rails < 3.

config/boot.rb handles the environment loading and the gem / vendor dance.

@webandy
Copy link

webandy commented Aug 12, 2010

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

@jkriss
Copy link

jkriss commented Aug 12, 2010

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

@zachwaugh
Copy link
Author

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.

@kenrett
Copy link

kenrett commented Dec 14, 2013

You just saved our lives..! Thank you so much for this... Had nearly pulled all of my hair out!

@russellsilva
Copy link

Is this current for Rails 3/4? It's my top Google result for "rails script load environment" so it might be worth updating.

@lloeki
Copy link

lloeki commented Mar 28, 2014

#!/usr/bin/env ruby
require File.expand_path('../config/environment',  __FILE__)

worked for me on Rails 3 (one-shot script located in Rails.root)

@dfwmountainbiker
Copy link

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.

@0xqd
Copy link

0xqd commented Sep 20, 2014

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.

@krongk
Copy link

krongk commented Mar 5, 2015

cool~

@taimoor
Copy link

taimoor commented Jun 18, 2015

@lloeki your solution worked for me in rails 3.

@giddie
Copy link

giddie commented Feb 22, 2016

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.

@localhostdotdev
Copy link

👍 require File.expand_path('../config/environment', File.dirname(__FILE__)) works (Rails 5.2)

@localhostdotdev
Copy link

even better: require_relative '../config/environment'

@nirname
Copy link

nirname commented Apr 1, 2020

my 2 cents

rails r hello.rb

executes hello.rb as if it is a part of rails app

@Eruanne2
Copy link

@giddie require File.expand_path('../config/environment', File.dirname(__FILE__)) worked for me too, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment