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可以解决问题。我改变了这个例子,因为我正在寻找一般的表单解决方案。

+0

你有什么东西在你的Gemfile为olark满宝石?您是否仅仅依赖于olark.js文件将其包含在您的应用程序中? – James

+0

我没有使用宝石。我用于Olark的所有内容都是JS代码片段。无论如何,我不希望这个问题是专门针对奥拉克的。我正在寻找更抽象的解决方案。 –

回答

19

我已经通过链轮的来源看,我发现, 该指令预处理器总是在任何引擎之前运行。 因此,使用ERB或其他引擎将任何条件逻辑添加到指令部分是不可能的。

UPDATE

约书亚皮克,answered对我的问题:

答案是肯定的,但如果这是你想怎么办:

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

试试这个:

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

它非常重要,告诉该文件应该被称为application.js.erb或sintax是错误的! –

0

根据您的部署环境,您可能会看到rack/olark gem

然后,您可以或许尝试这样的事情在你的Gemfile:

group :production do 
    gem 'rack-olark' 
end 

只是一个想法..

+0

谢谢,但我正在寻找更通用的解决方案。奥拉克只是一个例子。我编辑了这个问题。 –

相关问题