我有一个Rails应用程序,可以很好地加载开发中的所有资产。
<link rel="stylesheet" href="/assets/reset.css" type="text/css" media="screen" title="no title" />
<link rel="stylesheet" href="/assets/text.css" type="text/css" media="screen" title="no title" />
<link rel="stylesheet" href="/assets/buttons.css" type="text/css" media="screen" title="no title" />
<link rel="stylesheet" href="/assets/theme-default.css" type="text/css" media="screen" title="no title" />
<link rel="stylesheet" href="/assets/login.css" type="text/css" media="screen" title="no title" />
<link rel="stylesheet" href="/assets/notify.css" type="text/css" media="screen" title="no title" />
而在生产服务器上,它仍然使用上面的代码来加载 CSS。它不应该使用/assets/applicaiton.css 文件吗?我已经在生产环境中手动运行了 rake assets:预编译任务,我可以看到它在/public/assets 文件夹中创建了所需的文件。
那么,我需要做什么来告诉Rails使用压缩文件呢?
我的生产.rb看起来像这样:-
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = true
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = false
# Generate digests for assets URLs
config.assets.digest = true
你应该使用 stylesheet_link_tag 帮助程序像这样调用 css 文件:
= stylesheet_link_tag "application", :media => "all"
并将样式表插入应用程序样式表文件中,例如:
= require reset
= require text
= require button
...
然后修改你的 production.rb 文件,将 config.assets.compile 设置为 true
# Disable Rails's static asset server (Apache or nginx will already do this)
config.serve_static_assets = true
# Compress JavaScripts and CSS
config.assets.compress = true
# Don't fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
# Generate digests for assets URLs
config.assets.digest = true
"应该工作"