Рельсы + Героку + Джаммит

Я работаю над установкой Jammit в своем приложении Rails 3, а затем развертываю его в Heroku.

Я установил Jammit Gem и отлично настроил assets.yml, он работает на dev. Но когда я нажал на героку, файлы были 404'ing.

В инструкциях по использованию Jammit говорится: «Вы можете легко использовать Jammit в своем Rakefile и других скриптах:

require 'jammit'
Jammit.package!

Я не слежу за тем, где/как это работает. Запуск Jammit в команде моих сайтов, как и на Mac, приводит к тому, что команда не найдена.

Кто-нибудь из пользователей Jammit может помочь мне понять, как перейти к работе с Jammit?

Спасибо


person AnApprentice    schedule 10.12.2010    source источник


Ответы (5)


Я использую jammit в приложении Rails 3.0.7 на Heroku.

gem "jammit", :git => "git://github.com/documentcloud/jammit.git"

У меня есть это в файле rake, чтобы упаковать активы перед фиксацией/развертыванием

desc 'jammit'
  task :jam  => :environment do
  require 'jammit'
  Jammit.package!
end

И это в .git/hooks/pre-commit, так что это делается автоматически

echo "jamming it"
rake jam
git add public/assets/*
git add public/javascripts/*

По умолчанию время истечения срока действия на Heroku составляло всего 12 часов, чтобы увеличить его (потому что у меня есть схема очистки кеша, в которой я уверен), я поместил это в config/initializers/heroku.rb

module Heroku
  class StaticAssetsMiddleware
    def cache_static_asset(reply)
      return reply unless can_cache?(reply)
      status, headers, response = reply        
      headers["Expires"] = CGI.rfc1123_date(11.months.from_now)
      build_new_reply(status, headers, response)
    end
  end
end

Чтобы снизить нагрузку на мой сервер Heroku Rails, я также использую бесплатную учетную запись на CloudFlare, которая предоставляет легкий, обратный -proxy/cdn, с некоторыми приличными функциями аналитики и безопасности.

Когда я доберусь до кэширования общего контента, эта штука действительно завопит!

person J_McCaffrey    schedule 08.12.2011

Вы можете, как и я, использовать jammit force, чтобы упаковать свои ресурсы, загрузить все на s3 и определить хост(ы) ресурсов в rails. Это дает дополнительное преимущество, заключающееся в том, что ваш слаг меньше и более отзывчив, поскольку вы можете добавить свой общедоступный каталог в .slugignore .

В качестве альтернативы вам нужно решить, как заставить версию heroku работать из-за файловой системы только для чтения.

person mark    schedule 10.12.2010
comment
Вы размещаете свои активы на S3? Почему? Это не CDN, я мог бы сделать это с CloudFront, но мне любопытно, почему S3. - person AnApprentice; 10.12.2010

Вы также можете использовать хук git pre-commit, чтобы убедиться, что ваши активы упакованы перед отправкой на героку (или любой сервер). См. пример на https://gist.github.com/862102. Вы можете скопировать этот файл в .git/hooks/pre-commit в каталоге вашего проекта.

person mattwindwer    schedule 01.07.2011

это решение

https://github.com/kylejginavan/heroku_jammit

person HashDog Team    schedule 17.09.2011

Heroku имеет файловую систему только для чтения, поэтому Jammit не может хранить сжатые и минимизированные файлы CSS/JS.

Вот очень хорошая статья о проблеме упаковки ресурсов на героку: http://jimmycuadra.com/posts/the-challenge-of-asset-packaging-on-heroku

person dokaspar    schedule 23.11.2011