TL;DR:运行资产:预编译会将生产资产主机注入到为非生产环境生成的资产中。
背景:我们当前部署Rails应用程序的方式是CI服务器将每个成功的构建作为tarball部署到集成环境中。这个tarball一直被提升到prod env。但即使在我们对应用程序进行tar以推广到不同的环境之前,我们也会运行
rake assets:precompile
在压缩之前运行此命令后,我们最终将编译后的资源作为tarball的一部分,这节省了单个环境的部署时间(预编译是sloow)。
问题:在我们在生产环境中引入asset_host属性之前,这种安排工作得很好。因为在默认情况下,assets:precompile在生产环境中运行,并且sass文件使用image-url标记引用图像资产,所以资产主机开始被预编译器选取,并且生成的资产开始具有到生产环境的直接URL引用。显然,这是不可接受的。
在互联网上搜索得到了这个Github Issue,这是对我所遇到的问题的一个非常接近的描述。看到gem维护者的反应,这似乎是在运行资产:为所有环境预编译一次,而不是每个环境预编译一次似乎不是一个好主意。但考虑到预编译时间很慢,这似乎是我们唯一的方法。
那么其他Rails部署是如何处理这个问题的呢?
发布于 2012-10-26 04:19:27
我正在解决非常相似的问题。我们的解决方案是为每个单独的环境运行预编译-在我们的例子中,这些环境是登台和生产环境。原因是相同的-不同的资产主机。
如果可以,请仅在需要和真正需要资产的环境中运行预编译。
我们使用Capistrano与capistrano-ext
gem一起进行部署。这允许我们指定不同的阶段,并为每个阶段指定特定于该阶段的设置和方法(如果是stage ==环境,则为环境)。
发布于 2013-04-05 17:21:27
将public/assets/manifest.yml签入源代码控制
https://stackoverflow.com/questions/12922782
复制相似问题