2013-08-25 88 views
8

我正嘗試配置我的Apache服務器以從我的Rails應用程序提供靜態資產。我已經嘗試了建議的配置,但我的資產仍然沒有顯示,當試圖直接訪問它們時,我只是得到一個rails錯誤,沒有找到匹配的控制器,但資產的東西應該由apache直接處理,我想。 我的Apache配置是這樣的:Apache不會爲Rails應用程序服務器靜態資產

<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

資產,如的CSS?你是否對公共/資產文件夾進行了耙取? – clyde

+0

是的,我編譯了我的資產,他們全部到位 – soupdiver

+0

你能解決這個問題嗎? – nathanvda

回答

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.不知道這是否有所作爲。

此外,還有在配置/環境/ production.rb的設置,

# Disable Rails's static asset server (Apache or nginx will already do this). 
config.serve_static_assets = false 
+2

抱歉,但這並不適合我的問題。我已經完成了你提到的所有步驟,但是如果我理解了這一點,那麼在提供資產時不應該牽涉到鐵軌。 Apache應該自己做。因此是'LocationMatch'。但是rails仍然在處理資產目錄的請求,這些請求應該由apache直接完成 – soupdiver

0

這是直接從有關Apache服務器滑軌資產管道文檔:

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> 
相關問題