2011-10-24 52 views
3

我目前在使用Apache代理瘦(使用此article在Rails中,我应该启用serve_static_assets吗?

我的静态资产没有工作(例如样式表,JavaScript的)。 Apache应该为他们服务还是必须在config/environments/production.rb中启用config.serve_static_assets?如果Apache应该为他们服务,那么我可能做错了什么?

这里是我的Apache配置:

<VirtualHost *:80> 
    ServerName example.com 
    ServerAlias www.example.com 

    DocumentRoot /home/r/public_html/example/public 

    RewriteEngine On 

    <Proxy balancer://thinservers> 
    BalancerMember http://127.0.0.1:5000 
    BalancerMember http://127.0.0.1:5001 
    BalancerMember http://127.0.0.1:5002 
    </Proxy> 

    # Redirect all non-static requests to thin 
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f 
    RewriteRule ^/(.*)$ balancer://thinservers%{REQUEST_URI} [P,QSA,L] 

    ProxyPass/balancer://thinservers/ 
    ProxyPassReverse/balancer://thinservers/ 
    ProxyPreserveHost on 

    <Proxy *> 
    Order deny,allow 
    Allow from all 
    </Proxy> 

    # Custom log file locations 
    ErrorLog /home/r/public_html/example/log/error.log 
    CustomLog /home/r/public_html/example/log/access.log combined 

</VirtualHost> 

回答

7

删除以下两个代理指令行,它应该工作:

ProxyPass/balancer://thinservers/ 
ProxyPassReverse/balancer://thinservers/ 

第一重写线(RewriteCond)是一个测试,看看是否文件存在于公共目录中的文件系统上。如果失败,则继续到下一个重写行(RewriteRule),该行将请求传递给平衡代理。这条线实际上与两条代理指令线完全相同。

如果测试成功(即静态文件存在),它会跳过这一行。如果你已经删除了上面的两行,apache将从文档根目录中提供文件。但是,通过上面的代码,它最终会将其传递给代理。然后,正如您所指出的那样,rails将不会配置为默认提供此文件,并且将返回一个404.

+0

Duh!我忘记了那些只是创建代理循环的代码行。这就是我们从2008年开始遵循的指示。 – rxgx

相关问题