在Rails资产管道中包含外部JS,并在部署期间捆绑

Include external JS in Rails asset pipeline that gets bundled during deploys

本文关键字:部署 Rails 管道 包含外 JS      更新时间:2023-09-26

我已经回顾了这个问题-包括使用Rails 3.1资产管道的外部库-这基本上是我正在寻找的,有一个警告:我想在资产管道中包括外部url,以便当我部署到生产环境时,外部url与其他所需的本地文件捆绑在一起。

更多细节:

我的用例是我在GitHub上找到了一个我喜欢的插件,并且作为开源社区的好成员,我想帮助贡献回来。我正在考虑的最省时的技术是fork repo,然后在开发期间将需要该文件的本地项目指向所需JS文件的原始源代码,但是当我部署到阶段/生产时,将该文件与应用程序的其余部分捆绑在一起。这将允许我保持插件与父项目紧密联系,但保持事情在我自己的轨道上,这样我就可以决定何时从基础项目合并更新,以及提交任何修复我有回到父与简单的拉请求。

话虽如此,我还没有找到任何关于如何使用当前rails JS资产管道或是否有可能做到这一点的文档。一些快速的本地测试表明,这在css文件中有效,但在js文件中无效。有人能证实这是可能的吗?谢谢!

我会使用像这样的自定义rake任务。基本上,你要做的是将rake任务写入部署脚本的开头,但修改后将文件放入供应商/资产文件夹(或任何你想要拉入资产管道的地方)

这样你就可以在部署时拉出请求的文件,但是当你的资产管道将所有内容捆绑在一起时,它就在你的代码中。

下面是链接失效时的代码:
namespace :remote_file do
  desc "Get a file from a remote server"
  task :fetch do
  # based on http://snippets.dzone.com/posts/show/2469
  # http://farm1.static.flickr.com/92/218926700_ecedc5fef7_o.jpg
  Net::HTTP.start("farm1.static.flickr.com") do |http|
    resp = http.get("/92/218926700_ecedc5fef7_o.jpg")
    open("fun.jpg", "w") { |file| file.write(resp.body) } 
  end
end