asset:precompile生成的文件与stylesheet_link_tag(缺少摘要)在最小rails 4站点中生成的url不匹配

时间:2013-09-04 08:17:51

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

我正在使用Ruby 2.0.0-p247Rails 4.0.0

如果我像这样制作一个最小的Rails 4网站:

rails new minimal
cd minimal
rails generate controller home index
tee config/routes.rb <<EOF
Minimal::Application.routes.draw do
  root 'home#index'
end
EOF

然后使用

预编译资产
rake assets:precompile

它生成如下资产:

I, [2013-09-04T17:05:36.992951 #3549]  INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-723d1be6cc741a3aabb1cec24276d681.js
I, [2013-09-04T17:05:37.052303 #3549]  INFO -- : Writing /WORKINGDIR/minimal/public/assets/application-f1a14051f17824976271b9c0460232f0.css

但如果我以生产模式启动服务器,则使用

RAILS_ENV=production rails s

HTML中生成的URL未指向预编译文件:

<link data-turbolinks-track="true" href="/stylesheets/application.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/javascripts/application.js"></script>

我希望,而不是:

<link data-turbolinks-track="true" href="assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script>

默认config/environments/production.rb设置说要使用摘要:

config.assets.digest = true

但它似乎被选择性地忽略了?

我错过了什么吗?

更新:

我刚刚在Rails 4.2.3中对此进行了测试,这看起来是固定的,但是我们需要将更多的环境变量交给rails s命令以在生产模式下启动:

SECRET_KEY_BASE=$(rake secret) RAILS_SERVE_STATIC_FILES=true RAILS_ENV=production rails s

2 个答案:

答案 0 :(得分:12)

当我写这个问题的时候,我发现这篇博客文章暗示这是一个错误。

http://railsblog.kieser.net/2013/08/rails4-phusion-passenger-asset-pipeline.html

在各种建议中,只需将编译回退设置为真......

config.assets.compile = true

似乎足以让Rails生成适当消化的URL:

<link data-turbolinks-track="true" href="/assets/application-f1a14051f17824976271b9c0460232f0.css" media="all" rel="stylesheet" />
<script data-turbolinks-track="true" src="/assets/application-723d1be6cc741a3aabb1cec24276d681.js"></script>

明确设置RAILS_ENV和RAILS_GROUPS的另一个建议似乎在预编译文件上产生了不同的摘要字符串,但它们似乎总是与生成的HTML匹配。

答案 1 :(得分:0)

我能够通过提高资产版本号来解决不包括摘要的资产链接。

     # Version of your assets, change this if you want to expire all your assets
-    config.assets.version = '1.0'
+    config.assets.version = '2.0'

如果您正在升级,或者在较新的位置config/application.rb

,您会在config/initializers/asset.rb中找到此信息