我正在尝试配置我的apache服务器以从我的rails应用程序提供静态资产。我已经尝试了建议的配置,但我的资产仍然没有显示,当我试图直接访问它时,我刚刚遇到一个rails错误,没有找到匹配的控制器,但资产的东西应该由apache直接处理我认为。 我的apache配置如下所示:
<VirtualHost *:80>
ServerName xxx
DocumentRoot /home/xxx/test/public
PassengerEnabled off
<LocationMatch "^/assets/.*$">
Header unset ETag
FileETag None
ExpiresActive On
ExpiresDefault "access plus 1 year"
</LocationMatch>
ProxyPass / http://127.0.0.1:9292/
ProxyPassReverse / http://127.0.0.1:9292/
</VirtualHost>
我错过了什么吗?
答案 0 :(得分:0)
我用过,
RAILS_ENV=production bundle exec rake assets:precompile
为了使一切正常,我将其添加到config / application.rb ...
module MyApp
class Application < Rails::Application
.
.
config.assets.precompile += ['custom.css']
config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)
.
.
end
end
(我创建了custom.css.scss。但是Rails没有识别.scss,如上所示。)我假设您的所有资产在预编译后出现在public / assets文件夹中。我不明白你在使用LocationMatch做什么,原谅我的无知。此外,我没有使用端口80.我使用了8000.不确定这是否有所作为。
此外,config / environments / production.rb中还有一个设置,
# Disable Rails's static asset server (Apache or nginx will already do this).
config.serve_static_assets = false
答案 1 :(得分:0)
这直接来自关于Apache服务器的Rails Asset-pipeline文档:
http://guides.rubyonrails.org/asset_pipeline.html
4.1.1远期过期标题
预编译资产存在于文件系统中,由Web服务器直接提供。默认情况下,它们没有远期标头,因此为了获得指纹识别的好处,您必须更新服务器配置以添加这些标头。
对于Apache:
# The Expires* directives requires the Apache module
# `mod_expires` to be enabled.
<Location /assets/>
# Use of ETag is discouraged when Last-Modified is present
Header unset ETag
FileETag None
# RFC says only cache for 1 year
ExpiresActive On
ExpiresDefault "access plus 1 year"
</Location>