2016-04-05 12 views
10

Tôi đã sử dụng this method cho các phương thức trong đường ray. Nó hoạt động thực sự tốt, nhưng tôi vừa nâng cấp lên Rails 5 beta3, và bây giờ nó không hoạt động trong sản xuất.Rails 5 bỏ qua/lớp lib?

tôi nhận được lỗi này:

Completed 500 Internal Server Error in 22ms (ActiveRecord: 0.9ms) 

NameError (uninitialized constant ApplicationController::ModalResponder): 

app/controllers/application_controller.rb:26:in `respond_modal_with' 
app/controllers/tools_controller.rb:28:in `new' 

Được thừa kế của tôi ném ra với Rails 5?

My class ModalResponder < ActionController::Responder là trong /lib và các công trình phát triển ...

Nhìn để biết về những thay đổi với đường ray 5, nhưng các nguồn tin được giới hạn hiểu biết của tôi.

+2

Điều này có vẻ giống như một lỗi trong Rails 5.0.0. Nó cũng có mặt sau khi hết beta. Đối với tôi, nó chỉ xảy ra trong sản xuất, không phải trong phát triển. –

Trả lời

6

Bạn cần phải thêm một 'đòi hỏi' (trên application.rb) với các lớp của bạn bên trong lib thư mục.

Giống như:

require './lib/someclass'

tôi khuyên bạn nên đặt nó bên trong một plugin Rails.

+0

bạn có thể mô tả quy trình tốt nhất để biến nó thành plugin không? Tôi đã chuyển tệp lib vào thư mục/ứng dụng của mình để nó sẽ được đưa vào, nhưng đó có lẽ không phải là tốt nhất? –

+1

Chắc chắn! Bạn có thể đọc thêm về các plugin rails [ở đây] (http://guides.rubyonrails.org/plugins.html). Bạn nên kiểm tra tất cả và bạn có thể thêm cài đặt tệp tải bên trong plugin. Chỉ cần tạo một plugin và di chuyển thư mục lib của bạn bên trong chúng, tôi khuyên bạn nên tạo một tệp 'Foo' để thêm các yêu cầu. Trong dự án application.rb của bạn, chỉ cần thêm yêu cầu 'foo'. Xin lỗi hahah tiếng anh của tôi. –

+0

Bạn cũng có thể yêu cầu thư mục lib bằng cách sử dụng: 'config.autoload_paths << Rails.root.join ('lib')' –

-1

Nó nói rằng nó không thể tìm thấy ApplicationController::Responder đã được chuyển ra khỏi Rails 4.2 thành một viên ngọc riêng biệt.

Thêm gem 'responders' để Gemfile bạn

Lớp học trong lib không tự động nạp, bạn phải yêu cầu họ

+0

Tôi có thư mục lib tự động được nạp trong ứng dụng của tôi.rb ... –

+1

Tôi có thể chọn câu trả lời này nếu bạn có thể đưa ra lý do vì sao lib không được tự động tải. Câu trả lời này không đủ chi tiết để kiểm tra. –

15

Thay đổi này:

config.autoload_paths << Rails.root.join('lib') 

này:

config.eager_load_paths << Rails.root.join('lib') 

eager_load_paths sẽ bị hăm hở nạp trong sản xuất và theo yêu cầu phát triển. Làm theo cách này, bạn không cần yêu cầu mọi tệp một cách rõ ràng.

Xem thêm thông tin về this answer.

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