我正在尝试确保使用Rails资产管道提供压缩的css和js文件。我已经很好地完成了所有工作并且事情正在快速预编译 - 并且还愉快地同步到S3,我使用亚马逊的CloudFront CDN为他们提供服务。
我正在提供application.css和application.js,如下所示:
= stylesheet_link_tag "application"
= javascript_include_tag "application"
问题,简而言之:在应用程序布局中没有输出MD5后缀文件 - 只有原始的application.css和application.js
这有点陌生:所有图片都有MD5标记。 CSS / JS文件没有。
这是我的production.config:
config.action_controller.perform_caching = true
# Specifies the header that your server uses for sending files
config.action_dispatch.x_sendfile_header = "X-Sendfile"
config.assets.compress = true
# Fallback to compile on demand
# config.assets.compile = true
#config.assets.precompile += %w(application.css application.js)
# Generate digests for assets URLs
config.assets.digest = true
#push the assets to amazon
config.action_controller.asset_host = Proc.new { |source, request|
if request.ssl?
"https://tekpub-assets.s3.amazonaws.com"
else
"http://tekpub-assets.s3.amazonaws.com"
end
}
config.serve_static_assets = false
关于整个过程的令人愤怒的事情是我可以看到gzip压缩/消化文件 - 它们就在我的资产目录中。所有的em - CSS和JS文件。
但是我的manifest.yml文件只是这样更新:
---
application.js: application.js
application.css: application.css
当我运行预编译时没有错误 - 实际上一切看起来都很好看:
** Invoke assets:precompile:all (first_time)
** Execute assets:precompile:all
** Invoke assets:precompile:primary (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
Resolved collector.newrelic.com to 204.93.223.153
AssetSync: using /Volumes/Fatty/Sites/tpub6/config/initializers/asset_sync.rb
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
** Invoke assets:precompile:nondigest (first_time)
** Invoke assets:environment (first_time)
** Execute assets:environment
** Invoke environment (first_time)
** Execute environment
Resolved collector.newrelic.com to 204.93.223.153
AssetSync: using /Volumes/Fatty/Sites/tpub6/config/initializers/asset_sync.rb
** Invoke tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:nondigest
AssetSync: Syncing.
Using: Directory Search of /Volumes/Fatty/Sites/tpub6/public/assets
AssetSync: Done.
感谢您提出任何指示/推动/提示。
答案 0 :(得分:14)
好的,我找到了答案:如果资产管道无法编译文件(或文件类型),它将以Ruby / Rails风格静默失败。
在我的案例中有2个问题:有一个“。”在一个js文件名(bootstrap.min.js)中 - 它不喜欢它,我认为这是有道理的,因为它使用文件名来弄清楚如何处理文件(例如file.css.erb)。
下一个是一个不知道该怎么做的文件类型。由于移动文件的一些盲目和愚蠢,我在assets / images目录中有一个迷路的YAML文件。这扼杀了处理器制造资产:预编译失败......再次......默默地。
我发现这一点的方法是创建一个空的Rails项目并从头开始编译资源。这就是我发现JS文件问题以及愚蠢的YAML文件的方式。