如何在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
答案 0 :(得分:4)
您的示例将无效,因为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
答案 1 :(得分:2)
你可以这样做,但是你需要在application.html.erb中包含这些代码(在我建议的头部动作中)。
如果您将 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。
答案 2 :(得分:0)
Sprockets需要从文件开头设置//= require
语句,因此它们不起作用。
在这种情况下你可以使用ruby方法: sprokets github
最好在单独的文件中执行此操作。像这样:
的application.js
//= require 'config'
//= require 'jquery'
config.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) }
%>