Someone who understands how rails caching works can really help me out here. Here's the code, nested inside of the Rails::Initializer.run block:

```
config.after_initialize do
  SomeClass.const_set 'SOME_CONST', 'SOME_VAL'
end

```

Now if I run `script/server` and make a request, everything is dandy. However, on the second request to my Rails app, all goes to hell with an unitialized constant error. In production mode, I can make the second request successfully, meaning the constant is still there.

I've fixed the problem by changing the above to:

```
config.after_initialize do
  require 'some_class' # in RAILS_ROOT/lib/some_class.rb
  SomeClass.const_set 'SOME_CONST', 'SOME_VAL'
end

```

But now that means whenever I make a change to some\_class.rb, I have to restart the server. Is there any way to set constants in an environment file and have them work correctly in development mode? Why does the constant exist on the first request, but not the following request?

**UPDATE:** Since environment.rb is only read when the Rails app is booted and I want both my lib files and models to be reloaded on each request, I was forced to move the constants into the some\_class.rb file as follows:

```
if Rails.env.development?
  const_set 'SOME_CONST', 'SOME_DEVELOPMENT_VAL'
end

```

And in environments/production.rb, I have the old const\_set code.

**UPDATE:** An even better method using config.to\_prepare is detailed below.