2012-02-13 34 views
24

tôi nâng cấp một ứng dụng Rails 3.0 để Rails 3.1 mà tham gia đặt nàyAsset Pipeline: không bao gồm một tập tin admin.css

/* 
*= require_self 
*= require_tree . 
*/ 

trong file application.css. Tuy nhiên, có một tệp admin.css hiện đang ghi đè tệp css ứng dụng chính.

Có cách nào để loại trừ tệp admin.css không? Trong phần quản trị của trang web, tôi bao gồm tệp admin.css theo cách thủ công nhưng tôi cần một cách để loại trừ nó khỏi giao diện người dùng.

Trả lời

4

Similar question was asked earlier and you should check that one.

Sprockets sử dụng tệp kê khai để xác định nội dung nào cần bao gồm và phân phối. Các tệp kê khai này chứa các chỉ thị - hướng dẫn cho Sprockets biết các tệp nào cần để xây dựng một tệp CSS hoặc JavaScript đơn lẻ. Với các chỉ thị này, Sprockets tải các tệp được chỉ định, xử lý chúng nếu cần, nối chúng thành một tệp duy nhất và sau đó nén chúng (nếu Rails.application.config.assets.compress là đúng). Bằng cách phân phát một tệp thay vì nhiều tệp, thời gian tải trang có thể giảm đáng kể do trình duyệt thực hiện ít yêu cầu hơn.

Bạn có thể có bao nhiêu tệp kê khai tùy thích. Ví dụ: tệp kê khai admin.css và admin.js có thể chứa các tệp JS và CSS được sử dụng cho phần quản trị của ứng dụng.

Cụ thể, bạn có thể chỉ định các tệp riêng lẻ và chúng được biên dịch theo thứ tự được chỉ định.

Ví dụ và các chi tiết khác có thể được tìm thấy trong this guide.

Như vậy, application.css mới của bạn sẽ trở thành:

/* 
*= require styles 
*= require layout 
*/ 

/* Other styles */ 
89

Bạn có thể sử dụng chỉ thị các stub sprockets' trong biểu hiện của bạn như thế này:

/* 
*= require_self 
*= require_tree . 
*= stub admin 
*/ 

này sẽ loại trừ admin.css và cũng TẤT CẢ css yêu cầu trong đó !! Vì vậy, nếu bạn admin.css 's manifest vẻ như thế này:

/* 
*= require bootstrap 
*= require_self 
*/ 

các bootstrap.css cũng sẽ không bao gồm và không require thể fixe này! Chăm sóc này;)

+2

Đây là câu trả lời ngắn gọn hơn nhiều cho câu hỏi ban đầu. –

+0

Câu trả lời này là hữu ích mặc dù có một cái gì đó tôi không thích về mô hình của "bao gồm tất cả mọi thứ _except_ X". Có vẻ như sẽ sạch hơn khi nói "trong ngữ cảnh này, bao gồm X, trong bối cảnh khác, bao gồm Y". Xem [câu trả lời của tôi] (http://stackoverflow.com/a/42281440/199712) cho những gì có thể là một giải pháp tốt hơn trong một số trường hợp. Có nói rằng, tôi có thể tưởng tượng tình huống mà 'stub' sẽ hoàn toàn cần thiết khi thích hợp. –

+0

Tôi có thể sử dụng 'stub' để loại trừ một thư mục không? Nếu có thì sao? – skam

-1

soluction là thêm vào config/assets.rb

#config/assets.rb 
Rails.application.config.assets.precompile += %w(*.svg *.eot *.woff *.ttf *.gif *.png *.ico *.swf *.xap masonry.pkgd.min.js jquery.colorbox-min.js i18n/jquery.colorbox-pt-BR.js admin.css) 

Và Thêm vào app/views/layouts/_adm_layout.html.erb

#app/views/layouts/_adm_layout.html.erb 
<%= stylesheet_link_tag 'admin', media: 'all', 'data-turbolinks-track' => true %> 
1

giải pháp khác là để có hai thư mục trong số app/assets/stylesheets, ví dụ: một thư mục public và một thư mục admin.

Sau đó, trong app/assets/stylesheets/application.css, bạn có thể thay đổi require_tree . thành require_tree ./public.

Bạn có thể phải làm điều gì đó tương tự ở phía quản trị viên. Tôi tình cờ sử dụng viên đá quý Administrate để biết nơi tìm tài sản của riêng mình.

+0

Đối với nội dung JS có thể là nội dung tương tự hay không? Bạn đề nghị gì để làm cho nó hoạt động? –

Các vấn đề liên quan