2011-11-16 26 views
36

Tôi hơi bối rối vì có vẻ như application.css bao gồm chính nó hai lần, một khi nó liệt kê các tài nguyên từ tệp kê khai và sau đó là bộ nhớ cache. Vì vậy, khi tôi xóa một tập tin cá nhân nó vẫn có vẻ vẫn còn sống bên trong file application.css.đường ray 3.1 tài nguyên đường ống css bộ nhớ đệm trong phát triển

application.css (nguồn)

/* 
*= require twitter/bootstrap 
*= require_self 
*= require_tree ./common 
*= require_tree ./helpers 
*/ 

Những công trình như mong đợi và kết quả đầu ra trong chế độ dev tất cả các file liên quan cá nhân

development.rb

# Do not compress assets 
    config.assets.compress = false 

    # Expands the lines which load the assets 
    config.assets.debug = true 

đầu ra

<link href="/assets/twitter/bootstrap.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/application.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/common/announcement.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<link href="/assets/common/button.css?body=1" media="screen" rel="stylesheet" type="text/css" /> 
<Blah blah> 

application.css (đầu ra)

Điều này phải để trống? Vì tất cả những gì tôi có trong tệp application.css của mình là tệp kê khai và không có css thực tế nhưng thay vào đó tôi nhận được tất cả các mã của tôi nối dài 106kb.

IE nếu tôi xóa tệp trong thư mục chung, nó sẽ không biến mất. Nó không còn được liệt kê trong đầu ra nhưng css vẫn xuất hiện từ application.css

+2

Tôi có chính xác cùng một vấn đề cả với css và js .. không thể tìm ra. "Câu trả lời" bên dưới không giải quyết được vấn đề. Tôi chỉ làm việc trong chế độ dev bây giờ. Làm thế nào để tắt concatonation và minifying? Nó gây ra các plugin jquery của tôi chạy hai lần, CSS được tăng gấp đôi. – dsaronin

+2

Trong cấu hình/môi trường/development.rb, nếu tôi đặt config.assets.debug = false, thì tải hai lần sẽ không xảy ra vì các thẻ javascript/stylesheet bổ sung không được tạo. Tuy nhiên, tôi không biết liệu các thay đổi có đang được tạo động cho các tệp được hợp nhất hay không. – dsaronin

+2

bạn đã bao giờ tìm thấy giải pháp cho @holden này chưa? Tôi có cùng một vấn đề và đang cố gắng hết sức để tìm ra nó. – Josh

Trả lời

42

Tôi đã gặp vấn đề như thế này trước đây. Nó đã được gây ra sau khi tôi đã biên dịch trước các tài sản mà nó đã đi sau khi applcation.css bên trong thư mục công cộng cũng như trong thư mục ứng dụng. Tôi không chắc chắn làm thế nào để sửa chữa nó để nó không tiếp tục xảy ra trong khi ở chế độ dev nhưng nếu bạn xóa thư mục /public/assets của bạn, nó nên sửa chữa nó.

Kiểm tra xem bạn có thư mục công khai/tài sản không, nếu bạn đã làm và thư mục đầy, có thể là lý do bạn thấy gấp đôi.

+2

Làm cách nào để ẩn nội dung trong thư mục công khai giữa việc đẩy các thay đổi trong sản xuất và sau đó quay trở lại phát triển? Tôi có thể loại bỏ nó khỏi con đường của tôi trong dev bằng cách nào đó? – holden

+4

Tôi đã xóa 'application.js' và' application.css' của mình nhưng vẫn để lại các phiên bản được lấy dấu vân tay. Có vẻ như nó đang làm việc cho tôi. – ZMorek

+0

Xóa ứng dụng của tôi.css và apllication.css.gz đã khắc phục sự cố. Cảm ơn. –

-5

Các tài sản làm công việc của họ tốt hơn khi chạy ứng dụng trong môi trường sản xuất sau đó bạn sẽ chỉ tải ứng dụng.cs với tất cả các tệp bao gồm, và nén, ở đó để giảm yêu cầu máy chủ và ứng dụng này.css với các kiểu nén sẽ được lưu trữ.

http://guides.rubyonrails.org/asset_pipeline.html

10

Bạn có thể muốn nhìn vào

https://stackoverflow.com/a/7854902/686460

"Thêm config.serve_static_assets = false để development.rb sẽ ngăn ngừa các file tải từ/public/tài sản"

Điều đó đã làm nó cho tôi.

+0

Điều này đã không làm việc cho tôi không may, nó vẫn phục vụ một phiên bản nén của application.js trực tiếp từ/public/assets –

+0

Rất tiếc, xin lỗi @Agustin, giải pháp này đã hoạt động. Tuy nhiên, tất cả nội dung không phải là một phần của đường ống Nội dung không còn được phân phát (chẳng hạn như favicon.ico và phông chữ). Có vẻ như tôi sẽ phải đưa ra một giải pháp cho những tài sản đó. –

+0

Câu trả lời này gợi ý một cách tiếp cận khác: gán một thư mục tài sản giả cho môi trường phát triển. http://stackoverflow.com/a/11587288/550712 –

7

@ giải pháp Agustin của hiện nó cho tôi nhưng đây là một vài điều bạn cần làm:

  1. Xóa tất cả mọi thứ trong/tmp/cache/tài sản

  2. Thêm config.serve_static_assets = false để development.rb hoặc test.rb (tín dụng cho @Agustin)

  3. Khởi động lại máy chủ của bạn.

  4. Đảm bảo application.js/.css của bạn không được lưu trong bộ nhớ cache trong trình duyệt của bạn.Truy cập http://localhost:3000/assets/application.js?body=1 và nhấn ctrl + f5 để buộc làm mới (bạn cũng có thể thử thêm một thông số ngẫu nhiên vào cuối: http://localhost:3000/assets/application.js?body=1&rnd=12343 Nếu bạn nhận được thứ gì đó khác và ctrl + f5 vẫn chưa được trợ giúp, bạn cần xóa bộ nhớ cache của trình duyệt.

Bỏ qua một trong những bước trở lại một application.js cache/.css mâu thuẫn với bản cập nhật của tôi trong các tập tin duy nhất.

+0

Thiên Chúa điều này gây phiền nhiễu ... không có may mắn ở đây chưa –

+0

có bất cứ điều gì được lưu trữ ở nơi công cộng không? kiểm tra trang và đảm bảo application.css không được phân phối hai lần (hoặc chứa mã) ... Tôi biết bạn cảm thấy thế nào, nó rất khó chịu. – Abdo

37

hiện có (2012/09/24) một lỗi trong đường ray/sprockets gây nó để không phát hiện đúng các tệp đã nhập.

Điều này phải được cố định trong đường ray 3.2.9 và sau đó nhưng trong thời gian trung bình, bạn có thể làm việc xung quanh nó như sau:

  1. Giết dụ ray
  2. rm -rf tmp/cache
  3. Bắt đầu dụ ray

Bạn nên bây giờ được nhìn thấy css chính xác.

+1

Peter, bạn có thể vui lòng cung cấp liên kết tới lỗi này không? –

+0

chỉ muốn lưu ý rằng đây chính xác là những gì tôi cần làm. xóa bộ nhớ cache sau khi thiết lập chuyển đổi trong development.rb đã làm các trick – FireDragon

+0

Tôi đã có đường ray chạy trong khi tôi thực hiện thay đổi đá quý, dẫn 'twitter-bootstrap-rails' để có css cũ. Phá hủy thư mục, tất cả đã được sửa. Cảm ơn. – ZMorek

4

Cách tốt nhất, mà làm việc đối với tôi là để xóa nội dung của tmp/cache/ * thư mục ...

1

tôi đã cùng một vấn đề. Mặc dù thanh toán bù trừ tmp/bộ nhớ cache và công cộng/tài sản các application.css được rút gọn vẫn được lưu trữ và phục vụ từ một nơi nào đó và các thay đổi của tôi đối với các tệp css riêng lẻ không được phân phối.

này đã làm việc cho tôi: trong application.css loại bỏ các dòng *= require_self

máy chủ khởi động lại

mà dường như để loại bỏ bộ nhớ cache và nếu bạn click vào application.css trong mã nguồn trình duyệt của bạn, bạn sẽ không còn xem phiên bản được rút gọn

thay thế *= require_self trở lại tệp và tiếp tục phát triển.

3

Điều đó làm việc cho chúng tôi được thiết lập 'config.assets.debug = false'

này không còn thiết lập HTML bao gồm CSS như href = "/ tài sản/bootstrap-new.css? Body = 1" , thay vào đó hãy thiết lập nó như là href = "/ assets/bootstrap-new.css", mà tôi nghĩ là vấn đề.

0

Có một bước cuối cùng bắt buộc đối với tôi, nhưng tôi đã khắc phục sự cố. Dưới đây là những gì tôi đã làm:

  1. tắt máy chủ ray
  2. tài sản cào: sạch
  3. cào tmp: rõ ràng
  4. khởi động lại máy chủ ray

Sau đó, tôi làm mới màn hình của tôi trong Google Chrome và IT STILL DID KHÔNG LÀM VIỆC. Vì vậy, tôi đã khởi chạy Firefox và thì đấy, nó thực sự hoạt động. Điều này có nghĩa là Chrome đang lưu vào bộ nhớ cache các tệp cũ trong trình duyệt. Vì vậy, sau đó tôi xóa bộ nhớ cache của trình duyệt trong Chrome và nó đã hoạt động!

0

Tôi biết đây là một câu hỏi cũ, nhưng một bản sửa lỗi phù hợp với tôi là tôi đã ủy quyền cho môi trường phát triển của mình và có một khối location ~ ^/(assets)/ trong cấu hình. Hoặc là bình luận nó ra, hoặc thử khởi động lại nginx để làm mất hiệu lực bộ đệm ẩn. Nếu bạn đang phát triển, bạn có thể chỉ muốn bình luận hoàn toàn.

Tôi đã mất quá nhiều thời gian để khắc phục sự cố này cho đến khi tôi nhớ điều đó.

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