直接链接到资产管道中的编译资源?

时间:2013-02-26 12:52:53

标签: ruby-on-rails ruby-on-rails-3 asset-pipeline

我有一个脚本,它基本上是用户嵌入的“小部件”。

它只是简单的vanilla javascript,对其他资源没有任何要求。它位于/app/assets/javascripts/delivery.js

我想要做的是让文件被压缩/编译,然后让用户从脚本标签直接链接到它,即。 <script src="http://example.com/assets/delivery.js"></script>

但是现在......那是不行的。该文件在生产中不存在。

那么,如何像管道中的任何其他JS文件一样压缩该文件,然后直接链接到它?

2 个答案:

答案 0 :(得分:3)

如果你添加

 config.assets.precompile += ['delivery.js']

到您的application.rb,然后delivery.js将被视为清单文件:它将被预编译并在生产中作为delivery.js提供。清单文件通常只是一系列//= require(或//= require_directory)语句,但它们包含的任何javascript也将添加到生成的文件中。

默认情况下,application.js清单包含所有内容 - 您希望调整此内容以使其不包含仅用于独立提供的javascript。

答案 1 :(得分:0)

首先,确保您的app / assets / javascripts / delivery.js不在您的顶级“清单”javascript文件的包含中,即app / assets / javascripts / application.js。 application.js通常包含//= require_tree .,因此它默认包含您的delivery.js。你需要改变它。将“require_tree”替换为您希望在application.js中预编译和组合的所有资产的单独“require”语句。

接下来,更新您的环境文件(生产环境的config / environments / production.rb),将您的文件包含在预编译资产列表中:

config.assets.precompile += %w( delivery.js )

现在,您将它作为公共/资产目录中的单独文件,以与application.js相同的方式进行编译和压缩。请记住,它的名称附加了一个摘要,与您的application.js类似(当然,除非您通过设置config.assets.digest = false来提供没有摘要的文件)。