jshen
jshen

Reputation: 11927

How is the :assets group in rails 3.1 handled by bundler?

I don't understand what exactly is going on with this group, and what bundler is doing with it. Is it only loaded in dev mode? What if I want to make a new environment type, how should I handle this group? Etc.

group :assets do
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end

Upvotes: 20

Views: 8137

Answers (3)

Rajesh Omanakuttan
Rajesh Omanakuttan

Reputation: 6928

I think it should be,

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require(*Rails.groups(:assets => %w(development test)))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

because there are some warning with the line,

Bundler.require *Rails.groups(:assets => %w(development test))

So we use,

Bundler.require(*Rails.groups(:assets => %w(development test)))

Hope this helps :)-

Upvotes: 0

ipd
ipd

Reputation: 5714

To elaborate a little on the answer, from rails asset pipeline guide:

a) by default they are NOT included in production:

# Gems used only for assets and not required
# in production environments by default.

b) If you add a new environment type, you would want to handle it according to Dmitry's answer above. That is, add it as one of the groups that will require it.

Upvotes: 8

Dmitry Maksimov
Dmitry Maksimov

Reputation: 2861

The code that handles :assets group placed in config\application.rb. In rails 3.1 it is:

if defined?(Bundler)
  # If you precompile assets before deploying to production, use this line
  Bundler.require *Rails.groups(:assets => %w(development test))
  # If you want your assets lazily compiled in production, use this line
  # Bundler.require(:default, :assets, Rails.env)
end

Upvotes: 23

Related Questions