本文介绍了在 Rails 中,我应该启用 serve_static_assets 吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用 Apache 代理 Thin(使用此 文章)

I am currently using Apache to proxy to Thin (using this article)

我的静态资产都不起作用(例如样式表、javascripts).Apache 应该为它们提供服务还是我必须在 config/environments/production.rb 中启用 config.serve_static_assets?如果 Apache 应该为他们服务,那么我可能做错了什么?

None of my static assets work (e.g. stylesheets, javascripts). Is Apache supposed to be serving them or do I have to enable config.serve_static_assets in config/environments/production.rb? If Apache is supposed to serve them, then what am I probably doing wrong?

这是我的 Apache 配置:

Here is my Apache config:

<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>

推荐答案

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

Delete the following two proxy directive lines and it should work:

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

重写的第一行 (RewriteCond) 是测试文件是否存在于文件系统的公共目录中.如果失败,它会继续下一个重写行 (RewriteRule),它将请求传递给平衡代理.该行实际上与两个代理指令行的作用大致相同.

The first rewrite line (RewriteCond) is a test to see if the file exists on the filesystem in the public directory. If it fails, it continues to the next rewrite line (RewriteRule), which passes the request to the balanced proxy. This line actually does much the same thing as the two proxy directive lines.

如果测试成功(即静态文件存在),它将跳过这一行.如果您删除了上面的两行,apache 将从文档根目录提供文件.但是,在上面的行中,无论如何它最终都会将其传递给代理.然后正如您指出的那样,默认情况下不会将 rails 配置为提供此文件,而是会返回 404.

If the test succeeds (i.e the static file exists), it'll skip this line. If you've removed the two lines above, apache would then serve the file from the document root. However, with the lines above in, it'll just end up passing it over to the proxy anyway. Then as you pointed out, rails won't be configured to serve this file by default and will return a 404.

这篇关于在 Rails 中,我应该启用 serve_static_assets 吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 13:54