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

Ale*_*rov 5 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>
Run Code Online (Sandbox Code Playgroud)

生产:

<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>
Run Code Online (Sandbox Code Playgroud)

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

此致,Alexey Zakharov

Rup*_*ott 7

至少从Rails 3开始,您可以在config.action_view.javascript_expansions [:defaults] =变量中传递config/application.rb中定义javascript_include_tag的符号.:defaults

这将被注释掉,并且至少包括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)
Run Code Online (Sandbox Code Playgroud)

  • 此外,没有必要添加.js - 所以%w(jquery myscripts)可以工作. (2认同)

the*_*eIV 1

您可以使用辅助方法加载您的 js 并执行条件检查以确定它是哪个环境。

app/views/layouts/application.html.*(无论您通常在哪里包含 JavaScript)

load_javascript
Run Code Online (Sandbox Code Playgroud)

应用程序/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
Run Code Online (Sandbox Code Playgroud)

您可以通过只返回load_javascript文件列表并且只有一个javascript_include_tag.