Подтвердить что ты не робот

Как я могу обслуживать активы в /public, которые не являются частью конвейера активов с помощью puma/nginx?

Это вопрос AWS, я использую платформу Ruby 2.2 (Puma).

Мои скомпилированные активы (в/public/assets) обслуживаются, как ожидалось. Другие активы в /public не обслуживаются (404).

Где это настроить? Является ли это проблемой nginx? или проблема puma?

Или это просто проблема с изображением AWS?

Здесь показан живой пример (robots.txt должен быть подан из корня): http://staging.us-west-2.elasticbeanstalk.com/public/robots.txt

Также стоит отметить, что изображение платформы Passenger по умолчанию работает из коробки.

4b9b3361

Ответ 1

Итак, я использую ту же самую среду, и я нашел решение с небольшим google fu:

С рельсами 4+ в файле:

/config/environments/production.rb

вы должны найти следующие строки в верхней части файла

# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

Это все прекрасно и денди, так как мы используем пассажира (nginx или apache), но Puma не справляется с этим для нас:)

Чтобы решить эту проблему...

В вашей консоли AWS перейдите на панель управления эластичного бобового стека для рассматриваемого проекта и нажмите "Конфигурация" в меню слева.

Теперь щелкните значок маленькой шестерни в поле "Конфигурация программного обеспечения"

Теперь вы должны увидеть таблицу в разделе "Свойства среды", введите "RAILS_SERVE_STATIC_FILES" в новое поле в поле "Имя свойства", затем введите "true" (без кавычек) в поле значения, нажмите "Применить".

Viola! Теперь ваш проект обслуживает статические файлы:)

Ответ 2

В случае, если это помогает кому-либо, или кто-то знает, как его улучшить, вот конфигурация nginx, которая, наконец, заставила меня работать для меня. В /.ebextensions/01_files.config:

files:
    "/etc/nginx/conf.d/webapp_healthd.conf" :
        mode: "000755"
        owner: root
        group: root
        content: |
            upstream my_app {
              server unix:///var/run/puma/my_app.sock;
            }

            log_format healthd '$msec"$uri"'
                            '$status"$request_time"$upstream_response_time"'
                            '$http_x_forwarded_for';

            server {
              listen 80;
              server_name _ localhost; # need to listen to localhost for worker tier
              root /var/app/current/public;

              if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
                set $year $1;
                set $month $2;
                set $day $3;
                set $hour $4;
              }

              access_log  /var/log/nginx/access.log  main;
              access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;

              try_files $uri/index.html $uri @my_app;

              location @my_app {
                proxy_pass http://my_app; # match the name of upstream directive which is defined above
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              }

              location /assets {
                alias /var/app/current/public/assets;
                gzip_static on;
                gzip on;
                expires max;
                add_header Cache-Control public;
              }
            }
    "/opt/elasticbeanstalk/hooks/appdeploy/post/03_restart_nginx.sh":
        mode: "000755"
        owner: root
        group: root
        content: |
            #!/usr/bin/env bash
            rm /etc/nginx/conf.d/webapp_healthd.conf.bak
            rm /etc/nginx/conf.d/custom.conf            
            service nginx restart

Ответ 3

Мне нужно просто запустить bundle exec rake assets:precompile