Rails 3.1,Unicorn和Apache:静态文件

jir*_*iki 8 apache ruby-on-rails static-files unicorn

我有Rails 3.1,Unicorn和Apache设置.我的Apache设置如下,production.rb看起来像这样.我喜欢使用h264流媒体,但由于Rails正在为这些视频文件提供服务,因此Apache Mod无法运行.

DocumentRoot /blabla/current/public

RewriteEngine On
Options FollowSymLinks

<Proxy balancer://unicornservers>
  BalancerMember http://127.0.0.1:4000
</Proxy>

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

ProxyPass / balancer://unicornservers/
ProxyPassReverse / balancer://unicornservers/
ProxyPreserveHost on

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

XSendFile On
XSendFileAllowAbove on
Run Code Online (Sandbox Code Playgroud)

我必须启用serve_static_assets,否则我无法下载任何静态内容.我也有预编译资产,但它没有任何区别,因为除了Rails(Rack猜测)正在进行服务之外,公共目录中没有可用的文件.

我应该使用config.action_controller.asset_host还是我的Apache配置有问题.

小智 19

我有这个问题的帖子(是的,它也发生在我身上),希望它会有所帮助.

关键是要删除ProxyPass / balancer://unicornservers/模式,因为它会覆盖你的模式Rewrite Rule

这是我的apache服务器配置.

<VirtualHost *:80>

  ServerName example.org
  DocumentRoot /dir/of/your/project

  RewriteEngine On

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

  <Proxy balancer://unicornservers>
    BalancerMember http://127.0.0.1:2007
  </Proxy>

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)