8

我正在尝试配置我的 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>

我错过了什么吗?

4

2 回答 2

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
于 2013-08-25T23:43:44.640 回答
0

这直接来自有关 Apache 服务器的 Rails 资产管道文档:

http://guides.rubyonrails.org/asset_pipeline.html

4.1.1 远期过期标头

预编译的资产存在于文件系统中,并由您的 Web 服务器直接提供服务。默认情况下,它们没有未来的标头,因此要获得指纹识别的好处,您必须更新服务器配置以添加这些标头。

对于阿帕奇:

# 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>
于 2017-01-01T16:31:54.477 回答