Jak uniknąć serwowania wstępnie skompilowanych zasobów w trybie deweloperskim?

Wolę nie aby łączyć pliki JavaScript w trybie deweloperskim, ale podawać je jako pojedyncze pliki. Więc skonfigurowałem:

Rozwój.rb:

config.assets.compress = false
config.assets.debug = true
config.assets.compile = true

W moim katalogu/app/assets / javascript mam:

    [[19]}recenzje.js
  • recenzje/
    • foo.js
    • bar.js

Opinie.js:

//= require jquery
//= require jquery_ujs
//= require_tree ./reviews

Włączam JavaScript używając <%= javascript_include_tag "reviews" %> w moim układzie. Wygenerowana strona poprawnie odwołuje się do trzech Skrypty pojedynczo i {[3] } jest zasadniczo pusta. Jak na razie dobrze.

Teraz, gdy wstępnie skompiluję Moje zasoby do produkcji za pomocą rake assets:precompile trzy pliki JavaScript są połączone w reviews.js. To wszystko jest w porządku dla produkcji, ale teraz, w trybie deweloperskim , połączone {[3] } jest serwowane Dodatkowo do dwóch pojedynczych plików.

Oczywiście prowadzi to do wszelkiego rodzaju paskudnych błędów podczas tworzenia, ponieważ teraz zawartość foo.js i bar.js jest podawana dwa razy, jeden z nich w potencjalnie starszej wersji w reviews.js.

Jak mogę się upewnić, że Rails nie używa wstępnie skompilowanych zasobów w trybie deweloperskim?

Author: gariepy, 2011-11-04

4 answers

Wygląda na to, że kompilujesz lokalnie. Ponieważ pliki istnieją w oczekiwanej lokalizacji, są one obsługiwane przez twój serwer dev, a żądania nie będą wysyłane.

Jedynym sposobem, aby to zatrzymać, jest usunięcie skompilowanych plików.

Normalnie nie trzeba kompilować lokalnie. Oczekuje się, że prawie we wszystkich przypadkach zadanie precompile zostanie uruchomione podczas wdrażania aplikacji. Jest przepis Capistrano na to w przewodniku asset pipeline strona.

Jeśli musisz mieć te pliki lokalnie przypisane do repo, możesz użyć gałęzi, aby uniknąć problemu. Zarezerwuj swoją główną gałąź dla kodu produkcyjnego i utwórz drugą gałąź dla dev. Kompiluj i zatwierdzaj zasoby tylko na master. Kiedy przełączysz się na Deva, znikną. Scal dev do master w razie potrzeby.

Edit: upewnij się, że wymusisz aktualizację przeglądarki (control + F5) lub możesz znaleźć stare zasoby używane z pamięci podręcznej przeglądarki!

 52
Author: Richard Hulse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-29 19:44:31

W config/environments/development.rb zestawie:

config.assets.prefix = "/assets_dev"

Tak, że w trybiedevelopment Rails będzie tam szukał (ale nic nie znajdzie, ponieważ nie będziesz kompilował zasobów w development (to jest rzeczywiście to, co próbujesz zrobić-nie kompilować zasobów)).

Podczas wstępnej kompilacji dla produkcji Użyj

RAILS_ENV=production rake assets:precompile

Więc kompiluje się do domyślnego folderu zasobów, public/assets.

 80
Author: Haim Lankry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-21 04:47:49

W config/environments/development.rb zestawie:

config.serve_static_assets = false

I żadne pliki z /public nie będą serwowane

 17
Author: Peter Madsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-07 00:15:32

Próbowałem tego i zadziałało. rake assets:precompile RAILS_ENV=production

Zauważyłem, że nowa wersja assets pipeline robi to po uruchomieniu rake assets:precompile robi rake assets:precompile:all

 1
Author: Uchenna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-04 22:14:58