2013-03-13 28 views
6

Tôi đã đọc rất nhiều bài đăng và bài viết và câu hỏi & câu trả lời trên đường dẫn nội dung Rails nhưng tôi vẫn chưa tìm ra cách tắt hoàn toàn bộ nhớ đệm.Ngăn Rails đường dẫn tài sản 3.2.11 khỏi bộ nhớ đệm?

Chúng tôi đang sử dụng Rails 3.2.11 và trong môi trường Lab (tương tự như phát triển), chúng tôi đang gặp sự cố vì mặc dù chúng tôi không biên dịch trước hoặc lấy dấu tay vào nội dung trong đường dẫn nội dung mà chúng vẫn đang được lưu trong bộ nhớ cache bộ đệm Rails (Rack?). Điều này là khó chịu vì một số tài sản là ERBs thay đổi dựa trên cấu hình khác để bộ nhớ cache bị cũ. Để cố gắng tắt bộ nhớ đệm, chúng tôi đã đặt cấu hình này:

config.action_controller.perform_caching = false 

    config.assets.compress = false 

    config.assets.debug = true 

    # just in case 
    config.cache_store = :file_store, "file_cache" 

Tuy nhiên, tài sản vẫn hiển thị trong tmp/cache/assets. Tôi sẽ ít nhất mong đợi họ để hiển thị trong file_cache, nhưng tôi thực sự mong đợi họ không được lưu trữ ở tất cả.

Làm cách nào để ngăn các nội dung này được lưu trong bộ nhớ cache? Việc xóa bộ nhớ cache không đủ trong môi trường này.

Câu hỏi thưởng: miễn là các tệp này đang được lưu vào bộ nhớ cache, tại sao chúng ở số tmp/ chứ không phải trong file_cache/?

Trả lời

8

Để tắt bộ nhớ cache tài sản:

config.assets.cache_store = :null_store 

Lưu ý rằng đó là config. nội dung .cache_store không phải là tệp cấu hình Rails config.cache_store.

Cũng lưu ý rằng Sass có một bộ nhớ cache riêng cho stylesheets biên soạn, theo mặc định trong tmp/cache/sass, và nếu bạn muốn vô hiệu hóa mà bạn phải làm điều đó một cách riêng biệt:

config.sass.cache = false 

Để trả lời câu tiền thưởng câu hỏi, khi số Rails Guide cho biết:

Cửa hàng bộ nhớ cache Rails mặc định sẽ được Sprockets sử dụng để lưu trữ nội dung trong phát triển và sản xuất.

Tôi nghĩ rằng chúng có nghĩa là được định cấu hình Cửa hàng bộ nhớ cache Rails sẽ được sử dụng. Tôi đã sai, sử dụng bộ nhớ cache mặc định trừ khi bạn thay đổi rõ ràng bộ nhớ cache nội dung.

+0

Trong trường hợp bất kỳ ai đang tìm kiếm ở đây vì tài sản của họ không làm mất hiệu lực bộ nhớ cache giống như khi cập nhật, tôi giải quyết vấn đề đó bằng cách xóa 'config.assets.digest = true' khỏi tệp cấu hình dev của tôi. – mltsy

-1

Để tắt hoàn toàn tài sản đường ống, bạn có thể thêm chỉ thị này trong tập tin môi trường của bạn:

config.assets.enabled = false 

Nhưng nếu bạn vẫn muốn thưởng thức tài sản biên soạn đường ống dẫn và bộ nhớ đệm cho JS và CSS tĩnh của bạn, và tại cùng một thời gian sử dụng tệp ERB cho nội dung động, bạn có thể tạo my_assets_controller và tạo chế độ xem cho bộ điều khiển đó cung cấp nội dung động (tệp có đuôi mở rộng .css.erb.js.erb). Bạn chỉ cần bao gồm trong chế độ xem hoặc bố cục của mình <%= javascript_path '/my_assets/things_dynamically_generated.js' %>

+0

Điều duy nhất chúng tôi muốn từ đường dẫn nội dung trong phòng thí nghiệm là khả năng định vị nội dung trong hệ thống tệp, nhưng trong quá trình sản xuất, chúng tôi muốn tất cả bộ nhớ đệm. Chúng tôi không muốn phải kiến ​​trúc lại các tài sản chỉ để làm việc xung quanh bộ nhớ đệm tự động (không). –

-1

Điều này nghe giống như một vấn đề XY.

Nguyên tắc 1: Bản dựng phải xác định và độc lập với cấu hình theo môi trường.

Nguyên tắc 2: Việc biên dịch nội dung tĩnh phải là một phần của bản dựng.

Bạn nên chuyển sang hướng có các tài sản hoàn toàn tĩnh. Bạn có thể sử dụng ERB, nhưng chỉ để gọi các phương thức như asset_path, đó là xác định và tạo ra cùng một kết quả cho cùng một codebase. Bạn có thể đặt dữ liệu dựa trên cấu hình hoặc hành vi trong đó, nhưng chỉ khi dữ liệu hoặc hành vi giống nhau trên tất cả các triển khai (dev, test, staging, qa, pre-prod và prod).

Bất kỳ thứ gì đến từ cấu hình theo môi trường không được tìm đường vào nội dung tĩnh. Thay vào đó, bạn có thể phân phối điều đó trong tiêu đề HTTP, thuộc tính trên phần tử <html> hoặc các kỹ thuật tiêm khác. Mã tài sản tĩnh phải đủ thông minh để tìm kiếm dữ liệu được tiêm trong các tiêu đề HTTP hoặc các thuộc tính <html> và thay đổi hành vi của nó dựa trên dữ liệu được tiêm đó.

Đối với câu hỏi tiền thưởng, config.cache_store không phải là mục cấu hình điều khiển cho sprockets, sass, la bàn, vv cache.

+0

Tôi không đồng ý với cả Nguyên tắc 1 và Nguyên tắc 2 và không điều nào trong số này trả lời câu hỏi về cách tắt bộ nhớ cache cho đường ống nội dung. –

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