8

Rails アプリから静的アセットを提供するように Apache サーバーを構成しようとしています。提案された構成を既に試しましたが、アセットがまだ表示されず、それらに直接アクセスしようとすると、一致するコントローラーが見つからないというレールエラーが発生しましたが、アセットは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 Asset-pipeline ドキュメントから直接引用したものです。

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

4.1.1 遠い将来の Expires ヘッダー

プリコンパイル済みアセットはファイル システムに存在し、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 に答える