2011-12-19 10 views
8

Wiem, że jest już milion pytań na ten temat, ale nie mogę tego zrozumieć.Rails 3.1, wykluczyć pliki JS z potoku aktywów

Chcę dołączyć większość moich plików JS do potoku zasobów, ale mam kilka, które chcę załadować warunkowo (lub tylko na niektórych stronach). Są to duże, skomplikowane pliki i nigdy, nigdy nie będą używane przez 95% użytkowników, więc wolałbym, aby nie były one ładowane dla każdego użytkownika. Jeden zestaw plików JS jest dla kalendarza, umieszczonego w:

app/assets/javascripts/calendar 

Więc mój manifest jest skonfigurowany do obejmują tylko górną katalog (i nie podkatalog kalendarz):

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory . 

Mój config/środowisko/production.rb:

# Compress JavaScripts and CSS 
config.assets.compress = true 

# Don't fallback to assets pipeline if a precompiled asset is missed 
config.assets.compile = false 

# Generate digests for assets URLs. 
config.assets.digest = true 

# This following config is left over from previous Rails app, 
# so not sure if it's now unnecessary ... 
# Disable Rails's static asset server 
# In production, Apache or nginx will already do this 
config.serve_static_assets = false 

W widoku używam nifty_layout Ryan Bates' ręcznie zawierać pliki kalendarz:

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js" 

Próbowałem wstępnego kompilowania zarówno w fazie projektowania, jak i produkcji - dokumenty nie są jasne, gdzie powinienem to zrobić, ale wygląda na to, że jest produkcja.

I kiedy uruchomić stronę, mam to:

ActionView::Template::Error (calendar/date.js isn't precompiled) 

Nie chcę go prekompilowana. Chcę go załadować ręcznie. (W rzeczywistości byłoby dobrze, aby prekompilować plik inny niż główny plik application.js, który został utworzony, ale nie wiem jak to zrobić.)

Jakie jest rozwiązanie?

Dzięki!

Odpowiedz

4

OK, nie zdawałem sobie sprawy, jak to działa, ale ja myślę, że wymyśliłem to.

Dodaj pliki do ręcznie ładowane do config/Środowiska/production.rb tak:

config.assets.precompile += %w(calendar/*.js jquery_calendar/*.css) 

myślałem, że to po prostu złożyć je w application.js i application.css, ale widocznie nie - kompiluje je jako pojedyncze pliki.

Następnie można nazwać pliki jak tradycyjnie będzie (w tym przypadku, używając nifty_layout):

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js"