2015-06-14 16 views
15

Ứng dụng rails 4.1 của tôi kết nối với một máy chủ thứ hai, không chính thông qua SSH cho một công việc phụ trợ. Do đó, khi ứng dụng đường ray khởi động lại hàng ngày, kết nối SSH cần phải được bật/tắt (thay vì máy chủ thứ hai, không phải là máy chủ chính cần phải hoạt động), nếu không ứng dụng sẽ gặp sự cố. Điều này là do tải mong muốn theo mặc định được đặt thành true trong production.rb (config.eager_load = true).Tác động hiệu suất của việc vô hiệu hóa eager_load trong production.rb là gì?

Tôi bị cám dỗ để phá vỡ sự phụ thuộc này bằng cách vô hiệu hóa tải háo hức, nhưng tôi không thể tìm thấy nhiều thông tin về tác động hiệu suất. Vì vậy, câu hỏi của tôi là ...

1) nếu eager_load được đặt thành false, điều đó sẽ đơn giản làm chậm thời gian khởi động của ứng dụng hay ứng dụng sẽ tải các tài nguyên một cách háo hức vào lần đầu tiên chúng bị tấn công?

3) Nếu eager_load chỉ đơn giản là tắt, mức độ nào sẽ tác động đến hiệu suất khỏi ứng dụng (câu hỏi chủ quan hơn)?

2) Mô hình thực hiện kết nối SSH nằm trong thư mục app\models\legacy. Thay vì thay đổi eager_load thành sai, thư mục đó có thể bị loại trừ khỏi tài nguyên được tải không mong muốn không? Nếu vậy, làm thế nào? Tôi tin rằng tôi sẽ cần phải chỉnh sửa config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}')] nhưng không hoàn toàn chắc chắn.

production.rb:

# Eager load code on boot. This eager loads most of Rails and 
    # your application in memory, allowing both thread web servers 
    # and those relying on copy on write to perform better. 
    # Rake tasks automatically ignore this option for performance. 
    config.eager_load = true 
+1

Thay vì thay đổi tải mong muốn, bạn có thể không thay đổi lớp để tải/phân tích cú pháp lớp không truy cập trực tiếp ssh? Hay làm cho nó mạnh mẽ hơn? – nathanvda

Trả lời

1

Thiết eager_load=false có thể sẽ tốc độ khởi động của ứng dụng của bạn, bởi vì tải sẽ được hoãn lại cho đến khi cần thiết.

Tuy nhiên, hình phạt là ứng dụng của bạn có khả năng sẽ sử dụng nhiều bộ nhớ hơn (thường là tài nguyên máy chủ khan hiếm nhất). Tôi nghi ngờ rằng bạn cũng có thể gặp phải lỗi luồng nếu bạn sử dụng máy chủ đa luồng (ví dụ: puma) với eager_load=false.

Vì Rails tự động bao gồm tất cả các thư mục app/* trong đường dẫn tải mong muốn, tôi không thể nghĩ ra cách dễ dàng để loại trừ app/models/legacy trong khi mong muốn tải mọi thứ khác.

Thay vào đó, bạn có thể di chuyển nội dung của app/models/legacy đến ví dụ: legacy/ tại thư mục gốc của dự án của bạn và thêm rằng đến autoload_paths:

config.autoload_paths += %W(#{config.root}/legacy) 

Bây giờ Rails sẽ vẫn có thể tìm thấy các tập tin, nhưng họ sẽ không được nạp háo hức trong sản xuất.

+0

Cảm ơn Matt - đã chấp nhận câu trả lời của bạn làm câu trả lời. – user1322092

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