我如何在 Rails 3.2 中的 application.js.erb 中需要不同的文件?我尝试了以下但没有奏效
<% if Rails.env == production %>
//= require production_config.js
<% else %>
//= require other_config.js
<% end %>
//= require jquery
//= require jquery_ujs
我如何在 Rails 3.2 中的 application.js.erb 中需要不同的文件?我尝试了以下但没有奏效
<% if Rails.env == production %>
//= require production_config.js
<% else %>
//= require other_config.js
<% end %>
//= require jquery
//= require jquery_ujs
您的示例将不起作用,因为assets:precompile
在 erb 转换为干净的 js 之前。而且您的资产语法错误。是什么//= require 'production_config.rb'
?可能是'production_config.js'
。但是你不应该在资产注释中写引号和文件扩展名。
您可以编写文件config.js.erb并在其中写入如下内容:
<% if Rails.env == production %>
productionConfig();
<% else %>
otherConfig();
<% end %>
在你的application.js文件中简单地写
//= require config
//= require jquery
//= require jquery_ujs
您可以这样做,但您需要在 application.html.erb 中包含代码(在我建议的 head 操作中)。
如果您将production_config.js文件添加到“asset/javascript”文件夹,则可以使用以下方法添加它:
<% if Rails.env == production %>
<%= javascript_include_tag "production_config" %>
<% else %>
<%= javascript_include_tag "other_config" %>
<% end %>
确保您不将其称为 production_config.js.coffee (这些会自动捆绑)并且也不要将其添加到您的 application.js 中。
Sprocket 需要//= require
从文件开头设置语句,因此它们不起作用。
在这种情况下,您可以使用 ruby 方法: sprokets github
此外,最好在单独的文件中执行此操作。像这样的东西:
应用程序.js
//= require 'config'
//= require 'jquery'
配置.js.erb
<% require_asset(Rails.env.production? ? 'production_config' : 'other_config') %>
PS 另一个有用的方法是depend_on
,当你的资产需要在其他文件更改后重新编译时,它会有所帮助。
前任。如果您需要rails_config
gem的一些值
<%
paths = %w(config/settings.yml config/settings.local.yml config/settings)
paths.map(&Rails.root.method(:join)).each { |full_path| depend_on(full_path) if File.exist?(full_path) }
%>