2011-11-04 5 views
48

Wolę niż łączenie plików JavaScript w trybie programowania, ale serwuję je jako pojedyncze pliki. Więc skonfigurowane:Jak uniknąć prekompilowanych zasobów udostępnianych w trybie deweloperskim?

development.rb:

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

W moich/app/assets/javascript katalog mam:

  • reviews.js
  • opinie/
    • foo.js
    • bar.js

reviews.js:

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

I obejmują JavaScript używając <%= javascript_include_tag "reviews" %> w moim układzie. Wygenerowana strona poprawnie odwołuje się do trzech skryptów pojedynczo, a reviews.js jest zasadniczo pusta. Jak na razie dobrze.

Teraz, gdy prekompiluję moje zasoby do produkcji przy użyciu rake assets:precompile, trzy pliki JavaScript są łączone w reviews.js. To wszystko jest w porządku dla produkcji, ale teraz, w trybie programowania, połączony reviews.js jest obsługiwany dodatkowo do dwóch pojedynczych plików.

Oczywiście, prowadzi to do wszystkich nieprzyjemnych błędów podczas opracowywania, ponieważ teraz zawartość foo.js i bar.js jest serwowana dwukrotnie, jeden z nich w potencjalnie starszej wersji w reviews.js.

Jak mogę się upewnić, że Railsy nie używają prekompilowanych zasobów w trybie deweloperskim?

Odpowiedz

52

Wygląda na to, że prekompilujesz lokalnie. Ponieważ pliki istnieją w oczekiwanej lokalizacji, są one obsługiwane przez serwer dev, a żądania nie trafiają do Sprockets.

Jedynym sposobem na zatrzymanie tego jest usunięcie skompilowanych plików.

Zazwyczaj nie trzeba kompilować lokalnie. Oczekuje się, że prawie we wszystkich przypadkach zadanie prekompilacji będzie uruchamiane podczas wdrażania aplikacji. Na stronie przewodnika po potoku znajduje się przepis na Capistrano.

Jeśli musisz mieć te pliki, które są lokalnie zaangażowane w repozytorium, możesz użyć oddziału, aby uniknąć problemu. Zarezerwuj swój master branch dla kodu produkcyjnego i stwórz drugą gałąź dla dev. Tylko kompilować i zatwierdzać zasoby na master. Gdy przejdziesz na dev, znikną. Scalaj dev do master według potrzeb.

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

+0

Dzięki za radę, Usunąłem skompilowane pliki lokalnie i skonfigurowany tak, aby zostały one opracowane na git push to Heroku. –

+1

To była odpowiedź, której potrzebowałem. To prawda, że ​​nie potrzebuję tych wstępnie skompilowanych zasobów lokalnie, podczas gdy ja się rozwijam, ale ponieważ uczę się konfigurować potok zasobów, faktycznie potrzebuję ich, aby przetestować mój tryb produkcji lokalnie, zamiast czekać na niespodziankę na Heroku! Na razie zmienię nazwę katalogu (lub umieściłem je w gałęzi git), ale wciąż jest to wstyd, jest to jeszcze jedna rzecz, o której muszę pomyśleć, a nie opcja konfiguracyjna w środowisku programistycznym, która mówi "ignoruj ​​publiczną/aktywa" katalog ", na który liczyłem. – Phantomwhale

+1

Być może będziesz musiał pamiętać o wyczyszczeniu pamięci podręcznej przeglądarki, aby przeglądarka nie używała pliku application.js przypadkowo załadowanego przed rm -rf'd public/assets –

1

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

zauważyłem, że nowa wersja rurociągu aktywów robi to po uruchomieniu rake assets:precompile robi rake assets:precompile:all

80

W config/environments/development.rb zestawie

config.assets.prefix = "/assets_dev" 

tak, że w rozwoju Szyny tryb będzie tam wyglądać (ale nie znajdzie niczego, ponieważ nie skompilujesz zasobów w fazie rozwoju (tak naprawdę to właśnie próbujesz zrobić - nie kompilujesz zasobów)).

Kiedy prekompilacja dla produkcji użyć

RAILS_ENV=production rake assets:precompile 

tak kompiluje do folderu aktywów Domyślnie public/assets.

+15

To powinna być wybrana odpowiedź. Dobre znalezisko. –

+1

Należy zauważyć, że ta zmiana zmieni ścieżkę "assets /" używaną przez Rails w swoich adresach URL, dzięki czemu otrzymasz obrazy takie jak 'http: //127.0.0.1: 3000/assets_dev/favicon.ico' –

+0

Czasami masz prekompilować aktywa. To jest najlepsza odpowiedź. W przeciwnym razie musisz nadal usuwać i regenerować zasoby. –

15

w config/environments/development.rb zestawie:

config.serve_static_assets = false 

i żadne pliki z /public będzie służył

+3

należy pamiętać, że wszelkie przesłane pliki w folderze publicznym nie będą wyświetlane, więc najlepiej jest tego uniknąć. –

+1

W ostatniej wersji została zmieniona na 'config.serve_static_files' –