Không phải không có sự xâm nhập nghiêm trọng. Rails có khá nhiều rắc rối để đảm bảo các tệp của bạn được tải lại theo mọi yêu cầu (khi cache_classes=false
). Giá trị của biến cache_classes
cấu hình được sử dụng bởi initializers ở một số nơi không phải là ít trong số đó hạnh phúc:
- sử dụng
require
để tải file ruby khi cache_classes là true
(có nghĩa là họ không còn nạp thêm)
- lập callbacks phối để reaload việc áp dụng trên tất cả các yêu cầu khi
cache_classes
là false
bạn không có quyền truy cập vào các giá trị của biến cache_classes
, và bạn thậm chí có thể thay đổi nó nếu bạn thích:
Rails.configuration.cache_classes = true
Tuy nhiên, điều này sẽ không ảnh hưởng đến trường hợp đường ray đang chạy dưới dạng trình khởi tạo khi giá trị đó chỉ được sử dụng một lần khi ứng dụng đường ray khởi động.
Điều này có nghĩa là gì, trừ khi bạn sẵn sàng đầu tư một số thời gian và nỗ lực tấn công nghiêm trọng bạn thực sự không thể tránh việc khởi động lại máy chủ của mình. Vì vậy, những gì bạn cần xem xét là kiểm soát quá trình khởi động lại này thông qua bộ thử nghiệm của bạn.
Ví dụ: bạn có thể thử khởi động lại rails from within rails.Điều này sẽ cho phép bạn xác định hành động mà bộ thử nghiệm của bạn có thể nhấn ngay trước khi nó bắt đầu thực hiện (để khởi động lại máy chủ ở chế độ phù hợp) và một hành động khác mà máy chủ có thể nhấn sau khi tất cả các thử nghiệm đã kết thúc, để khởi động lại mọi thứ với cache_classes
bộ với những gì nó từng là. Bạn sẽ kiểm soát giá trị của các lớp bộ nhớ cache thông qua một biến môi trường like this post suggests.
Nó vẫn sẽ đòi hỏi một chút công việc để thiết lập tất cả điều này và làm cho nó để treo với nhau, nhưng điều này có lẽ là đặt cược tốt nhất của bạn nếu bạn muốn có một giải pháp 'tự động kỳ diệu'.
Đó không phải là ý tưởng tồi khi có hai máy chủ chạy song song nhưng không giải quyết được vấn đề. Tôi vẫn sẽ cần phải khởi động lại máy chủ thử nghiệm mới này bất cứ khi nào tôi thực hiện thay đổi. – ilya
Tôi đoán bạn có thể phải quyết định 'yêu cầu nhanh hơn với khởi động lại khó chịu' hoặc' yêu cầu chậm hơn tự động tải thay đổi ' –
Vâng, đó là trường hợp hiện tại. Tôi chỉ muốn có thể bật "chế độ nhanh" trong một khoảng thời gian nhất định. – ilya