2017-01-26 15 views
0

Я недавно обновил приложение от 3 до 4.2.7 и теперь мы, имеющие вопросы по производственной среде:Rails 4 модернизации производство Nginx вопросы

  1. активов обслуживаются как текст/html вместо их соответствующие заголовки css/js.
  2. (может быть связано) Предварительно скомпилированные активы в подкаталогах не найдены, что означает, что /cssfile.css загружен успешно, а /subdir/cssfile.css - нет.

В ходе обновления не было изменений в конфигурационных файлах nginx. Изменения в конфигурации/окружающей среды/production.rb являются следующие:

+ config.eager_load = true 
- config.serve_static_assets = false 
+ config.serve_static_files = false 
- config.assets.compress = true 
+ config.assets.js_compressor = :uglifier 
+ config.assets.css_compressor = :sass 

На развертывание config.assets.css_compressor = :sass вызвало проблемы, так что я удалил его и прекомпиляция успешно закончил, не знаю, почему это произошло, так как я где-то читал, что в Rails 4 по умолчанию используется css_compressor: sass.

Вот Nginx конфигурация, используемая на сайте:

upstream SITENAME { 
    server unix:/home/deploy/SITENAME/shared/pids/unicorn.sock; 
} 

server { 
    listen 80; 
    server_name production.SITENAMEart.com; 
    root /home/deploy/SITENAME/current/public; 
    access_log /var/log/nginx/SITENAME.access.log main; 

    client_max_body_size 64M; 

    location ~ ^/assets/ { 
    expires max; 
    add_header Cache-Control public; 
    add_header ETag ""; 
    break; 
    } 

    location ~ ^/(assets)/ { 
    root /home/deploy/SITENAME/current/public; 
    gzip_static on; 
    expires max; 
    add_header Cache-Control public; 
    } 

    location/{ 
    try_files $uri @SITENAME; 
    } 

    location @SITENAME { 
    include proxy.conf; 
    proxy_pass http://SITENAME; 
    } 

    # stats url 
    location /nginx_stats { 
    stub_status on; 
    access_log off; 
    #allow SOME.IP.ADD.RESS; 
    #deny all; 
    } 

} 

server { 
    listen 443; 
    server_name production.SITENAMEart.com; 
    root /home/deploy/SITENAME/current/public; 
    access_log /var/log/nginx/SITENAME.access.log main; 

    ssl on; 
    ssl_certificate   /usr/local/nginx/conf/ssl/wildcard.SITENAMEart.com.crt; 
    ssl_certificate_key  /usr/local/nginx/conf/ssl/wildcard.SITENAMEart.com.key.unsecure; 
    ssl_client_certificate /usr/local/nginx/conf/ssl/geotrust.crt; 

    location ~ ^/assets/ { 
    expires max; 
    add_header Cache-Control public; 
    add_header ETag ""; 
    break; 
    } 

    location/{ 
    try_files $uri @SITENAME; 
    proxy_set_header X-Forwarded-Proto https; 
    } 

    location @SITENAME { 
    include proxy.conf; 
    proxy_pass http://SITENAME; 
    proxy_set_header X-Forwarded-Proto https; 
    } 

    # stats url 
    location /nginx_stats { 
    stub_status on; 
    access_log off; 
    } 

} 

Что меня удивляет больше всего, что релиз был тщательно протестирован на постановке перед развертыванием производства и имеет Nginx конфигурацию - не появились там никаких проблем.

ответ

0

Вопрос был решен. Это было связано с пользовательским скриптом symlink, который я портировал с Capistrano v2, скрипт удалил содержимое каталога public/assets после создания активов.

Я еще не выяснил, почему это не было проблемой на нашем промежуточном сервере.