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", перезапустите пул единорога и повторите попытку.