我正在使用 Ruby 2.0.0-p247
和 Rails 4.0.0
如果我像这样创建一个最小的Rails 4网站:
如果我创建一个最简化的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
然后使用以下命令预编译资产:
Then precompile the assets with
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
config.assets.compile = true
会影响性能。 - Johannrake assets:precompile
(就像config.assets.compile
是false
一样),那么实际上永远不会触发实时重新编译代码(因为它总是会看到预编译版本并提供服务)。 - pix