如何在开发环境中将特定资产从管道中排除?

12

我希望在开发环境中防止某些资产被包含在资产管道中。

到目前为止,我尝试了以下方法:

# app/assets/javascripts/application.js.erb
<% if Rails.env.production? %>
//= require google_analytics_snippet
<% end %>

并且

# app/assets/javascripts/application.js.erb    
<% if ENV['RACK_ENV'] == 'production' %>
//= require google_analytics_snippet
<% end %>

我似乎只能实现在清单中是否出现//= require google_analytics_snippet这行的功能。无论我使用哪种尝试的解决方案,google_analytics_snippet.js文件中的实际代码都不会被加载,无论环境如何。

有没有办法可以做到这一点?

编辑:
当我第一次发布这个问题时,我在我的示例中使用了一个名为olark.js的javascript文件。那是一个糟糕的示例选择,因为Olark有一个rubygem可以解决这个问题。我已经更改了示例,因为我正在寻找通用形式的解决方案。


你的Gemfile中有关于olark的gem吗?你是完全依赖于olark.js文件将其包含在你的应用程序中吗? - James
我没有使用Gem。对于Olark,我只是使用JS片段。无论如何,我不想让问题仅限于Olark。我正在寻找一个更抽象的解决方案。 - David Tuite
2个回答

19

我查看了sprockets的源代码,发现指令预处理器总是在任何引擎之前运行。因此,不可能使用ERB或其他引擎在指令部分添加任何条件逻辑。

更新

Joshua Peek在我的问题中回答说:

答案是肯定的,但如果你想做到这一点:

<% if Rails.env.production? %> 
//= require google_analytics_snippet
<% end %>

试试这个替代方案:

<% if Rails.env.production?
require_asset "google_analytics_snippet"
end %>

2
非常重要的是要说明文件应该被称为application.js.erb,否则语法就会出错! - andre.orvalho

0
根据您的部署环境,您可能需要查看rack/olark gem
然后您可以在您的gemfile中尝试类似以下的内容:
group :production do
  gem 'rack-olark'
end

只是一个想法..


谢谢,但我正在寻找一个更通用的解决方案。Olark只是一个例子。我已经编辑了问题。 - David Tuite

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接