Проблема с активами в S3 - PullRequest
3 голосов
/ 27 марта 2012

В производстве я использую Heroku и динамические активы на S3. Работает нормально. Теперь я пытаюсь отправить мои статические активы на S3. Я следовал этому уроку https://devcenter.heroku.com/articles/cdn-asset-host-rails31

Я добавил актив asset_sync, настроил мои ENV-файлы heroku, мой config / production.rb и запускаю heroku run rake assets:precompile

Вроде нормально работает:

    Using: Directory Search of /app/public/assets
    Uploading: assets/application.js.gz
    Uploading: assets/application.css
    Uploading: assets/application-8977252f192f3e36dbd6b5142de920e3.css.gz
    Uploading: assets/eurof35-webfont-4ea19cda003d589e688cedcf9f79ddd6.eot
    Uploading: assets/application.css.gz
    Uploading: assets/application-8977252f192f3e36dbd6b5142de920e3.css
    Uploading: assets/application-a904f1bc7724b6f68e1f8d38d03a093e.js.gz
    Uploading: assets/application-a904f1bc7724b6f68e1f8d38d03a093e.js
    Uploading: assets/application.js
    AssetSync: Done.

Однако, когда я загружаю свой веб-сайт, нет файлов CSS или JS. Когда я проверяю код, есть <code><link href="http://s3.amazonaws.com/annoncestest/assets/application-85cc4376a5de3b224db7c0548a44e7cb.css" media="all" rel="stylesheet" type="text/css" />

Как вы можете видеть, вызываемое приложение CSS отличается от того, что у меня есть в моей корзине S3.

У вас есть идеи?

РЕДАКТИРОВАТЬ: Однако он прекрасно работает для файла application.js, он принимает хорошие файлы Но не для CSS-файлов (application.css и admin.css). Я пробовал с CloudFront, и результат тот же.

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Вы используете Rails 3.2, так что теперь это намного проще. Выньте драгоценный камень asset_sync. Перейдите в Amazon и найдите раздел CloudFront (вместо S3). Это их интерфейс CDN. Возможно, вы уже настроили его на использование своего ковша S3.

В Rails 3.2 все, что вам нужно сделать, это настроить CloudFront для использования «Origin». С источником вы указываете местоположение вашего приложения, а не ведро. Когда пользователь запрашивает файл из CDN, CDN перейдет в ваше приложение, получит файл и добавит его в кэш CDN. Поскольку Rails Assets использует уникальное имя файла, у вас всегда будет самый актуальный файл.

Поместите местоположение CloudFront в приложение rails в качестве источника ресурсов. Затем разверните и дайте героку скомпилировать ваши активы.

Поместите следующее в ваш production.rb

  # Setup amazon CDN
  config.action_controller.asset_host = "xxxxxxxxxxxxx.cloudfront.net"
0 голосов
/ 26 июля 2012

Чтобы закрыть билет, я наконец нашел решение благодаря помощи Heroku. Решение в другом билете Почему Heroku не использует хороший manifest.yml

Надеюсь, это поможет!

...