2016-04-05 13 views
10

मैंने रेल में मॉडलों के लिए this method का उपयोग किया है। यह वास्तव में अच्छी तरह से काम करता है, लेकिन मैंने अभी रेल 5 बीटा 3 में अपग्रेड किया है, और अब यह उत्पादन में काम नहीं कर रहा है।रेल 5 अनदेखी/lib कक्षा?

मैं इस त्रुटि मिलती है:

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' 

मेरी विरासत रेल 5 के साथ बंद फेंक दिया जाता है?

मेरे class ModalResponder < ActionController::Responder/lib में है और विकास में काम करता है ...

रेल 5 के साथ परिवर्तन के बारे में जानकारी के लिए खोज रहे हैं, लेकिन सूत्रों का कहना है मेरी जानकारी तक सीमित हैं।

+2

यह रेल 5.0.0 में एक बग की तरह लगता है। यह बीटा से बाहर होने के बाद भी मौजूद है। मेरे लिए, यह केवल उत्पादन में होता है, विकास में नहीं। –

उत्तर

6

की आवश्यकता होती है करने के लिए है एक 'की आवश्यकता होती है' (application.rb पर) lib अंदर अपनी कक्षाओं के साथ फ़ोल्डर।

तरह:

require './lib/someclass'

मैं तुम्हें यह एक रेल प्लगइन के अंदर डाल सलाह देते हैं।

+0

क्या आप इसे प्लगइन बनाने के लिए सबसे अच्छी प्रक्रिया का वर्णन कर सकते हैं? मैंने lib फ़ाइल को मेरी/ऐप निर्देशिका में ले जाया है, इसलिए इसे शामिल किया जाएगा, लेकिन शायद यह सबसे अच्छा नहीं है? –

+1

ज़रूर! आप रेल प्लगइन्स [यहां] के बारे में अधिक पढ़ सकते हैं (http://guides.rubyonrails.org/plugins.html)। सभी का परीक्षण करना बेहतर है और आप प्लगइन के अंदर लोड फ़ाइल सेटिंग्स जोड़ सकते हैं। बस एक प्लगइन बनाएं और आपको उनके अंदर lib फ़ोल्डर ले जाएं, मैं आवश्यकता जोड़ने के लिए एक फ़ाइल 'फू' बनाने की सलाह देता हूं। आपके application.rb प्रोजेक्ट में बस 'foo' की आवश्यकता है। क्षमा करें मेरी अंग्रेजी हाहा। –

+0

आप का उपयोग कर lib फ़ोल्डर की भी आवश्यकता हो सकती है: 'config.autoload_paths << Rails.root.join ('lib')' –

-1

यह कहता है कि इसे ApplicationController::Responder नहीं मिला जो रेल 4.2 को एक अलग मणि में स्थानांतरित कर दिया गया था।

अपने Gemfile lib में

क्लासेस autoloaded नहीं कर रहे हैं करने के लिए gem 'responders' जोड़ें, आप आप जोड़ने की जरूरत है उन्हें

+0

मेरे पास lib.bb ... –

+1

में लिब निर्देशिका ऑटो लोड है, यदि आप तर्क दे सकते हैं कि lib क्यों ऑटोलोड नहीं किया गया है तो मैं इसे उत्तर के रूप में चुन सकता हूं। यह उत्तर चेक की योग्यता के लिए पर्याप्त विस्तृत नहीं है। –

15

बदलें इस:

config.autoload_paths << Rails.root.join('lib') 
इस के लिए

:

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

eager_load_paths बेसब्री से उत्पादन में और मांग पर विकास में लोड हो जाएगा। इसे इस तरह से करने के लिए, आपको प्रत्येक फ़ाइल को स्पष्ट रूप से आवश्यकता नहीं है।

this answer पर और जानकारी देखें।

संबंधित मुद्दे