Рельсы + Героку + Джаммит - PullRequest
9 голосов
/ 10 декабря 2010

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

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

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

require 'jammit'
Jammit.package!

I»Я не понимаю, где и как это работает. Запуск команды Jammit на моих сайтах, как на Mac, дает команду, не найденную.

Любые пользователи Jammit, которые могут помочь мне понять, как перейти на работу с Jammit?

Спасибо

Ответы [ 5 ]

6 голосов
/ 08 декабря 2011

Я использую 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 , которая обеспечивает легкий обратный прокси / cdn с некоторыми приличными функциями аналитики и безопасности.

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

3 голосов
/ 10 декабря 2010

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

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

2 голосов
/ 01 июля 2011

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

1 голос
/ 17 сентября 2011
0 голосов
/ 23 ноября 2011

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

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

...