Rails 3.1, Unicorn и Apache: статические файлы

У меня есть Rails 3.1, Unicorn и Apache setup. Мои настройки Apache ниже и производство.РБ выглядит так:этой. Мне нравится использовать потоковую передачу 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

Я должен включить serve_static_assets или я не могу загрузить какие-либо статические вещи. У меня тоже есть предварительно скомпилированные активы, но это не будет иметь никакого значения, поскольку ни один файл не доступен из общего каталога, если Rails (Rack, я думаю) не делает порция.

должен ли я использовать config.контроллер действий.asset_host или что-то не так с моей конфигурацией Apache.

2 ответов


у меня есть в должности для этой проблемы (да, это также случилось со мной), надеюсь, это поможет.

ключевой момент-убрать ProxyPass / balancer://unicornservers/ pattern, потому что он переопределит ваш 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>

как раз от вашей продукции.код rb:

# Specifies the header that your server uses for sending files
# config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
# config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

попробуйте раскомментировать строку с заголовком "X-Sendfile", перезапустите пул единорога и повторите попытку.