2011-09-03 18 views
5

Właśnie uaktualniłem moją aplikację na Heroku z Rails 3.0 do 3.1 i próbuję sprawić, by potok zasobów działał. Głównym problemem jest to, że mogę czytać z Heroku zalogować następujące rodzaje linii, dla każdego składnika:Assets pipeline podczas aktualizacji do Rails 3.1 na Heroku

2011-09-03T16:35:28+00:00 app[web.1]: cache: [GET /assets/border-a3c571a354b9381740db48aeebfaa63a.jpg] miss 

Jeśli rozumiem rurociągu prawidłowo, to nie powinno być „miss” na każde żądanie robię od A przeglądarkę, ale należy ją znaleźć w pamięci podręcznej.

Czytanie docs Heroku można znaleźć następujące wyjaśnienie:

Rails 3.1 provides an assets:precompile rake task to allow the compilation penalty to be paid up front rather than each time the asset is requested. If this task exists in your app we will execute it when you push new code. 

Ale jak należy, że "aktywa: prekompilacji" zadaniem będzie? Próbowałem zbudować projekt z szynami 3.1 od zera, aby spróbować dowiedzieć się, ale nie ma takiego zadania w gołym projekcie. Czy może czegoś brakuje? Jak mogę sprawić, aby zasoby zostały znalezione w pamięci podręcznej? Może to tylko problem z konfiguracją.

Są to opcje moim pliku konfiguracyjnym produkcji:

config.serve_static_assets = false 
config.assets.compress = true 
config.assets.compile = true # If I turn this off I get a 500 error and logs say that an asset isn't compiled 

Moje environment.rb ma ten wiersz:

config.assets.enabled = true 

dziękuję za pomoc!

+0

Kompiluję zasoby bezpośrednio na heroku, nie zanieczyszczając mojego lokalnego repozytorium za pomocą uzupełnionych zasobów. Użyj polecenia: heroku uruchom atrybuty prowizji: prekompilacja –

Odpowiedz

4

zastanawiałem się samo, ale tu jest wskazówka, aby pomóc dowiedzieć się, czy aktywa są żywo kompilacji lub nie

  1. prowadzony rake assets:precompile lokalnie
  2. dokonać pewnych zmian w css ale nie uruchom zadanie natarcia
  3. git add, commit i popchnąć do Heroku

Jeśli zmiany wprowadzone w punkcie 2 pojawi się na on roku, to wiesz, że twoja aplikacja jest kompilowana na żywo

Nie zapominaj, że jesteś teraz odpowiedzialny za buforowanie http, ponieważ Varnish nie jest już włączony na seledyn, więc musisz skonfigurować pamięć podręczną statywu i memcached sam:

Ale tak, uważam, że ten zaskakujący zbyt

+0

Dziękuję za odpowiedź, jest pełna ważnych informacji. – alvatar

1

można spróbować z config.serve_static_assets zestaw do true i

config.action_dispatch.x_sendfile_header = "X-Sendfile" 

dodany do pliku config/environments/production.rb?

Po przekazaniu kodu do Heroku powinieneś zobaczyć prekompilację ogłoszoną przez kompilator AFAICT.

+0

"-----> Przygotowywanie aplikacji dla potoku zasobów Rails", ale tak samo było wcześniej. Nadal dostaję brak pamięci podręcznej ... – alvatar

+0

Czy nie powinienem używać dyrektywy ngnix? 'config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'' – tibbon

1

Upewnij się, że jesteś na urządzeniu Heroku "Cedar" stack. Następnie Heroku will automatically precompile your assets during slug compilation.

Uwaga: Nadal dostaję "brak pamięci podręcznej", ale nie sądzę, że to prawda, ponieważ Twoja aplikacja nie działałaby, gdyby Twoje zasoby nie zostały skompilowane.

+3

tak, mam stos cedrowy. Jeśli aktywujesz "kompilację na żywo", kompiluje ją za każdym razem, gdy brakuje pamięci podręcznej. Właściwie, jeśli dezaktywuję tę opcję (z "config.assets.compile = true"), to w ogóle nie działa. – alvatar

Powiązane problemy