配置Rails以在开发和生产中使用不同的js

时间:2010-09-14 18:01:30

标签: javascript ruby-on-rails-3

我希望Rails在开发和生产模式下注入不同的js文件。

示例:

发展:

<script src="/javascripts/jquery.js" type="text/javascript"></script>
<script src="/javascripts/myscripts.js" type="text/javascript"></script>

生产:

<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>

是否有可能在Rails 3中实现它?

此致 Alexey Zakharov

2 个答案:

答案 0 :(得分:7)

至少从Rails 3开始,您可以将javascript_include_tag帮助符号:defaults传递给config / application.rb中的变量config.action_view.javascript_expansions [:defaults] = < / p>

目前这将被注释掉,并且至少包含application.js。

如果要为生产和开发定义一组不同的默认值,请将此行注释掉,然后打开config / environments / production.rb和config / environments / development.rb。此处定义的任何设置都将覆盖application.rb中的任何设置,并且仅适用于相关环境。对于您的示例,您需要以下内容:

# 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)

答案 1 :(得分:1)

你可以有一个辅助方法加载你的js并执行条件检查它是什么环境。

app / views / layouts / application.html。*(通常包含您的javascript的地方)

load_javascript

应用程序/助手/ 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

您可以让load_javascript只返回一个文件列表并且只有一个javascript_include_tag来进一步干掉它。