I want Rails to inject different js files in development and production modes.
Example:
Development:
<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.js" type="text/javascript"></script>
Production:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.min.js" type="text/javascript"></script>
Is it possible to achieve it in Rails 3?
Regards, Alexey Zakharov
From at least Rails 3, you can pass the javascript_include_tag
helper the symbol :defaults
which is defined inside your config/application.rb at the variable config.action_view.javascript_expansions[:defaults] =
This will currently be commented out and will always at least include application.js.
If you want to define a different set of defaults for production and development then leave this line commented out and open up config/environments/production.rb and config/environments/development.rb. Any settings defined in here will override any set in application.rb and only apply in the relevant environment. For your example, you would want the following:
# development.rb
config.action_view.javascript_expansions[:defaults] = %w(jquery.js myscripts.js)
# production.rb
config.action_view.javascript_expansions[:defaults] = %w(http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js myscripts.min.js)
You could have a helper method load your js and perform the condition check as to which environment it is.
app/views/layouts/application.html.* (wherever you normally include your javascript)
load_javascript
app/helpers/application_helper.rb
def load_javascript
if Rails.env.production?
javascript_include_tag 'js1', 'js2', :cache => true
else
javascript_include_tag 'js3', 'js4'
end
end
You could DRY it up a little further by having load_javascript
only give you back a list of the files and have only one javascript_include_tag
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With