रेलोक में चल रहे कार्य को 2.3-शैली के प्लग और डिप्रेशन चेतावनियों को चलाता है


155

मैं रेल 3.2 में अपग्रेड कर रहा हूं, और रेक डीबी चला रहा हूं: माइग्रेट मुझे फॉर्म की कई त्रुटियां देता है:

चेतावनी चेतावनी: आपके पास विक्रेता / प्लगइन्स में 2.3-शैली के प्लग हैं! इन प्लग इन का समर्थन रेल 4.0 में हटा दिया जाएगा। उन्हें बाहर ले जाएं और उन्हें अपने Gemfile में बंडल करें, या उन्हें अपने ऐप में lib / myplugin / * और config / initializers / myplugin.rb के रूप में मोड़ें। इस पर अधिक के लिए जारी नोट देखें: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released । (/ एप / राकफाइल से बुलाया गया: 7)

क्या है कि मेरी vendor/pluginsनिर्देशिका खाली है - वहाँ एक और प्लगइन्स निर्देशिका है कि यह संदर्भित है?


1
मेरे लिए और भी अधिक विस्तृत था क्योंकि मेरे पास वहां सामान था, लेकिन इसे हटाने के बाद भी हेरोकू से त्रुटि हुई! शानदार सवाल, शानदार जवाब
फांटोमेवले

जवाबों:


203

क्या आप हेरोकू का उपयोग कर रहे हैं?

Heroku Rails 3.x अनुप्रयोगों में प्लगइन्स इंजेक्षन करेगा .. रेल 3 में इस इंजेक्शन से बचने के लिए, अपने आवेदन में rails_12factor रत्न शामिल करें। ( हरोकू रूबी समर्थन 2013-10-26)

रेल 4 में भी rails_12factor रत्न आवश्यक है।

यदि यह मणि आपके आवेदन में मौजूद नहीं है, तो आपको तैनात करते समय एक चेतावनी मिलेगी, और आपकी संपत्ति और लॉग कार्यात्मक नहीं होंगे। ( रेलकोक 2013-10-26 पर रेल 4 )

हाल ही में 2013-08 के अनुसार, हेरोकू ने हमेशा रैलिंग 3 ऐप्स में प्लगइन्स को इंजेक्ट किया, यहां तक ​​कि अनुशंसित रत्नों के साथ भी। यह रूबी बिल्डपैक के साथ एक मुद्दा था, और पीआर 11 द्वारा तय किया गया था , 2013-08-06 में विलय कर दिया गया था।


1
हां, मुझे एहसास है कि सभी चेतावनियाँ मेरी हरोकू स्क्रिप्ट और लॉग से आई थीं। मुझे लगता है कि (ए) यह प्लगइन इंजेक्शन और (बी) है कि हरोकू टीम इसे वास्तविक समस्या बनने से पहले ठीक कर देगी।
निर्भय_फूल

मैं एक नौसिखिया हूँ और मैं थोड़ा-सा अटक गया हूँ कि मैं रेलिंग-3.2.0 को कैसे संपादित करता हूँ। क्या आप मदद कर सकते हैं
बेंजामिन

@vezu मेरी सलाह है कि आप शुरू न करें। यह कुछ ऐसा था जो हम बंडलर का उपयोग शुरू करने से पहले करते थे, लेकिन अभी यह काम करने की संभावना नहीं है, और शायद सामान को तोड़ देगा।
मैथ्यू रूडी

2
मैंने एक इनिशलाइज़र gist.github.com/1709421 को जोड़ने की कोशिश की, लेकिन यह काम नहीं करता (मुझे लगता है कि प्लगइन्स ऐप इनिशियलाइज़र की तुलना में पहले लोड किए गए हैं)। मेरा सुझाव चिंता का विषय नहीं है ... इसका सिर्फ शोर है।
मैथ्यू रूडी

3
एक साल बाद ... हरोकू से कोई बदलाव नहीं।
कोर्टिम्स

12

तुम कोशिश कर सकते हो

::ActiveSupport::Deprecation.silenced = true

अपने में production.rbयह सिर्फ शोर है, क्योंकि।


5
आदर्श रूप से कोई केवल इस विशेष चेतावनी को दबाएगा, क्या आप जानते हैं कि यह संभव है?
विंसेंट

यदि आप production.rb में कर आप विकास में त्रुटियों को देखने चाहिए - अगर सब और development.rb में विपरीत सेट विफल रहता है
iterion

2
मेरे लिए चेतावनियों का दमन नहीं
लियोपड

6
सिर्फ इस चेतावनी को दबाने के लिए एक हैक करने के लिए निम्नलिखित को जोड़ने के लिए है application.rb:ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
Liron Yahdav

8

in config / environment.rb जोड़ें:

ActiveSupport::Deprecation.silenced = true 

रेल शुरू करने से पहले, जैसे:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                               

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

इसी तरह रेक कार्यों में चेतावनियों को निष्क्रिय करने के लिए अपने राकफाइल के शीर्ष के पास साइलेंसिंग विन्यास डालें:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                           

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

आप इसे केवल उत्पादन में केवल चुप्पी के लिए ब्लॉक में लपेट सकते हैं:

if ENV['RAILS_ENV'] == "production"
  ActiveSupport::Deprecation.silenced = true
end

हम्म .. इसने मेरी चेतावनी को भी नहीं हटाया।
मार्टिन

मैंने शुरू में उपरोक्त दो टिप्पणियों के इस उत्तर को बी / सी पास किया था , लेकिन वास्तव में इसने मेरे लिए काम किया । रनिंग रेल 3.2.6। YMMV।
नोच मेदमैन

4

मुझे जो सबसे अच्छा तरीका मिला है वह यहाँ प्रलेखित है । यह आपको खोज की है और इस सवाल क्योंकि आप पाया संभालने है कर पुरानी शैली प्लग इन हो।

मैं मेक के साथ गया था यह बिल्कुल भी नहीं था , क्योंकि मुझे अपने कैपिस्ट्रानो की तैनाती के दौरान प्लगइन्स को चालू / बंद करने में सक्षम होने की आवश्यकता थी, इस बात पर आधारित था कि मैं किस ऐप के स्वाद को तैनात कर रहा था। इससे पहले कि मैं config.plugins का उपयोग करने के लिए क्या प्लगइन का उपयोग निर्दिष्ट करने के लिए। इस दृष्टिकोण के साथ मैं इसके बजाय config.before_configuration पर "आवश्यकता" का उपयोग कर रहा हूं।


+1। मैं समाप्त हो गया मैट Coneybeare का उपयोग करके आप अपनी साधारण रेल 2.3 प्लगइन्स को 3.2 में बदलने के लिए एक अच्छा वॉकथ्रू लिंक (पेज @ यूरी लिंक में पाया गया) देता है। मुझे यह समाधान पसंद आया क्योंकि यह केवल चेतावनी को चुप नहीं करता था, यह वास्तव में उन्हें ठीक करता है।
यिर्मयाह

1

बस बंदर पैच में डाल दिया /lib/silence_heroku_warnings.rb

module Rails
  class Plugin < Engine

    alias :not_silenced_initialize :initialize

    def initialize(root)
      ActiveSupport::Deprecation.silence{ self.send :not_silenced_initialize, root }
    end

  end
end

और आवश्यकता config/application.rbरेल के बाद बस में इसकी आवश्यकता होती है:

require 'rails/all'
require File.expand_path('../../lib/silence_heroku_warnings', __FILE__)

2.x-शैली प्लगइन्स से सभी deprecations को बंद किया जाना चाहिए। अन्य पदावनतियां दिखाई देंगी।


1

केवल चेतावनी देने के बजाय एक क्लीनर तरीका, यहां आप क्या कर सकते हैं।

लकड़हारा इंजेक्शन के लिए आप हेरोकू के नए मणि का उपयोग करने का प्रयास कर सकते हैं जो जेरेड बेक ने अपने उत्तर में ऊपर उल्लेख किया है ।

इसके बजाय हमने क्या किया:

यदि आप अपने vendor/pluginsफ़ोल्डर में एक ही नाम से एक निर्देशिका है, तो आप अपने खुद के प्लगइन्स को इंजेक्ट करने से हेरोकू को रोक सकते हैं । फ़ोल्डर को बस अस्तित्व में होना चाहिए। हरोकू तब अपने प्लगइन को इंजेक्ट नहीं करेगा, और अगर कोई कोड नहीं है, तो रेल डिप्रेशन चेतावनियों के साथ आपत्ति नहीं करेगा। हम इसे समझने के लिए एक रीडमी फ़ाइल डालते हैं:

vendor/plugins/rails_log_stdout/readme.md

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


बेहतर है .gitkeepकि विक्रेता / प्लगइन्स / rails_log_stdout नाम की एक रिक्त फ़ाइल जोड़ें, जो कि गिट .gitkeepका उपयोग करते समय खाली निर्देशिका रखने के लिए एक सम्मेलन है।
tmaier

पर्याप्त रूप से, मैं थोड़ा और अधिक वर्बोसिटी पसंद करता हूं क्यों, यही कारण है कि मुझे रीडमी दृष्टिकोण पसंद आया। आप सही हैं कि .gitkeepएक सम्मेलन है।
वोल्फ्राम अर्नोल्ड

0

साइलेंस डेप्रिसिएशन नोटिस का नया तरीका है:

config.active_support.deprecation = :silence

आपकी config/environments/production.rbफ़ाइल में।


3
मेरे लिए चेतावनियों को दबाना भी नहीं।
लीपड

0

ऐसा लगता है कि हेरोकू ने आखिरकार इसे संबोधित किया है।

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.