2011-12-19 36 views
8

Tôi biết có một triệu câu hỏi đã có trên này, nhưng tôi không thể nhận được điều này.Rails 3.1, loại trừ các tệp JS khỏi đường ống nội dung

Tôi muốn bao gồm hầu hết các tệp JS của mình trong đường dẫn nội dung, nhưng tôi có một vài tệp tôi muốn tải có điều kiện (hoặc chỉ trên một số trang nhất định). Đây là những tệp lớn, phức tạp và sẽ không bao giờ được sử dụng bởi 95% người dùng, vì vậy tôi không muốn tải chúng cho mọi người dùng. Một tập hợp các file JS là dành cho một cuốn lịch, đặt trong:

app/assets/javascripts/calendar 

Vì vậy, biểu hiện của tôi được thiết lập để chỉ bao gồm các thư mục trên cùng (và loại trừ các thư mục con dương lịch):

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

cấu hình của tôi/môi trường/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 

Trong giao diện, tôi đang sử dụng nifty_layout Ryan Bates' tự bao gồm các tập tin lịch:

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

Tôi đã thử biên dịch trước trong cả phát triển và sản xuất - các tài liệu không rõ ràng nơi tôi phải làm điều này, nhưng nó trông giống như sản xuất.

Và khi tôi chạy trang, tôi có được điều này:

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

Tôi không muốn nó biên dịch sẵn. Tôi muốn nó được nạp thủ công. (Trên thực tế, nó sẽ là OK để biên dịch trước trong một tập tin khác với app.js chính được tạo ra, nhưng tôi không biết làm thế nào để làm điều đó.)

Giải pháp là gì?

Cảm ơn!

Trả lời

4

OK, tôi không nhận ra đây là cách hoạt động, nhưng tôi nghĩ rằng Tôi đã tìm ra.

Thêm các tập tin được tự nạp vào config/môi trường/production.rb như vậy:

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

Tôi nghĩ điều này chỉ gấp chúng vào application.js và application.css, nhưng dường như không - nó biên dịch chúng thành các tệp riêng lẻ.

Sau đó, bạn có thể gọi các tập tin như bạn thường sẽ (trong trường hợp này, sử dụng nifty_layout):

javascript "calendar/date.js", "calendar/jquery.weekcalendar.js", "calendar/custom.js" 
Các vấn đề liên quan