रेक डीएसएल तरीकों के लिए वैश्विक पहुंच को हटा दिया गया है


86

मैं रूबी के माध्यम से रेल 3 ट्यूटोरियल बुक पर काम कर रहा हूं और कमांड लाइन पर निम्नलिखित टाइप कर रहा हूं:

rake db:migrate

जो निम्नलिखित चेतावनी का उत्पादन किया।

WARNING: Global access to Rake DSL methods is deprecated.  Please Include
    ...  Rake::DSL into classes and modules which use the Rake DSL methods.

WARNING: DSL method DemoApp::Application#task called at /Users/imac/.rvm/gems/ruby-1.9.2-p180@rails3tutorial/gems/railties-3.0.7/lib/rails/application.rb:215:in `initialize_tasks'

मुझे यकीन नहीं है कि इसके बारे में क्या करना है या इसके साथ कैसे काम करना है। मैं रेक के लिए कोई अन्य कमांड नहीं जानता।

मैं इस समस्या को कैसे ठीक करुं?

जवाबों:


64

मुझे यह स्टैक ओवरफ्लो प्रश्न रूबी ऑन रेल्स एंड रेक समस्याओं में मिला: अनइंस्टाल्यूटेड निरंतर रेक :: डीएसएल । यह एक @DHH ट्वीट को संदर्भित करता है।

निम्नलिखित को अपने जेमफाइल में रखें

gem "rake", "0.8.7"

आपको ऐसा कुछ दिखाई दे सकता है

rake aborted!
You have already activated Rake 0.9.1 ...

मेरे पास अभी भी मेरी निर्देशिका में रेक 0.9.1 की एक प्रति थी इसलिए मैंने इसे हटा दिया।

आप निम्न कमांड चलाकर रेक को 0.9.1 "डिलीट" कर सकते हैं:

gem uninstall rake -v=0.9.1

यदि आपके पास मणि के कई संस्करण स्थापित हैं, तो आपको एक संस्करण चुनने के लिए प्रेरित किया जाएगा।

0.9.1 को साफ करने के बाद, मैं भागा

bundle update rake

और अंत में मेरी डेटाबेस फ़ाइलों को बनाने में सक्षम था। मैं उपयोग कर रहा था rake db:create, लेकिन इसके लिए भी काम करना चाहिए rake db:migrate

मुझे उम्मीद है यह मदद करेगा।


5
वह मेरे काम नहीं आया। मुझे वास्तव में रेक को हटाना था 0.9.1> मणि की स्थापना रेक -v = 0.9.1 और फिर> बंडल अपडेट धन्यवाद एंटोनियो

1
मैं एंटोनियो के साथ सहमत हूं - जब मैंने रेक को हटाने के लिए कहा 0.9.1 मेरा मतलब था उपयोग के माध्यम से gem uninstall rake -v=0.9.1। इसे स्पष्ट नहीं करने के लिए मेरी गलती। स्पष्टीकरण के लिए धन्यवाद एंटोनियो! चीयर्स, ब्रायन
ब्रायन ब्रुनिज़

13
मुझे नहीं लगता कि पुराने पुस्तकालयों का जानबूझकर उपयोग करना अच्छा है, जब नीचे टिप्पणी देखकर नया काम किया जा सकता है।
स्मार

2
अधिक सरल समाधान नीचे NPatel द्वारा सुझाया गया एक है। बस एक लाइन Rakefile में जोड़ें।
स्लोबोदान कोवासेविक

मेरे पास इस संकल्प के साथ कोई भाग्य नहीं था। यह अभी भी रेक 0.9.1 या 0.9.2 की स्थापना रद्द करने के बाद बंडल अपडेट चलाने के बाद उसी त्रुटि के साथ आया था।
मार्क

111

include Rake::DSLअनुप्रयोगों के लिए लोड होने से पहले Rakefile में जोड़ना कहा जाता था। मेरे लिए भी काम किया गया था।

तो ऊपर उपयोगकर्ता के मामले DemoApp::Application.load_tasksमें Rakefile से पहले ।


धन्यवाद। फिक्स्ड माय "चेतावनी: रेक डीएसएल तरीकों के लिए वैश्विक पहुंच को हटा दिया गया है।" मुसीबत।
स्लोबोदान कोवासेविक

क्या इस मुद्दे को ठीक करने का यह उचित तरीका है?
मार्क

2
@Marc, वर्तमान में यह एकमात्र फिक्स है जिसे मैं 3.0.8 या इससे अधिक के उन्नयन के बिना जानता हूं। यह समस्या उस रिलीज़ में हल हो गई है: github.com/rails/rails/commit/… । यदि आप एक बेहतर सुधार पाते हैं तो कृपया मुझे बताएं। इसके अलावा, चेतावनी के अनुसार मुझे लगता है कि यह उचित समाधान है।
पटेल

1
यह वह उपाय है जिसके साथ मैं गया था। मुझे लगता है कि रेक किस संस्करण के साथ काम करता है के साथ गेम खेलने की तुलना में बस लाइन जोड़ना पसंद करता हूं।
jaydel

2
इसने मेरे लिए 1.9.2 और रेल 3.0.7 के साथ रेक 0.9.2
स्टीवन चानिन

5

मुझे इंस्टॉलर के साथ विंडोज पर एक ही समस्या थी। रूबी 1.9.2 और रेल 3.0.9। मैंने जो किया था यह रहा:

bundle update rake
bundle show rake

ऐसा करने के बाद मैं रेक 0.9.2 चला रहा था।

फिर मैंने आवेदन रूट फ़ोल्डर में Rakefile को इस प्रकार अद्यतन किया:

require File.expand_path('../config/application', __FILE__)
require 'rake'
# If you named your application something other than SampleApp, change that below
module ::SampleApp
    class Application
        include Rake::DSL
    end
end

module ::RakeFileUtils
    extend Rake::FileUtilsExt
end

SampleApp::Application.load_tasks

जैसा कि टिप्पणी में कहा गया है, सुनिश्चित करें कि आपके ऐप का नाम उपरोक्त दो उपयुक्त लाइनों में सही है।


1
और heroku rake db:migrateकाम करने की आज्ञा प्राप्त करने के लिए, मुझे require 'rake/dsl_definition'रेकफाइल (आवश्यकता 'रेक लाइन के ऊपर) को भी जोड़ना था ।
LikeMaBell

यह सब करना मेरे लिए काम करता है, लेकिन इसकी जरूरत नहीं है। एनपीटेल के सुझाव ने इसे ठीक किया।
स्कॉट स्वेज़े

0

यदि आप इसे रेल के बाद के संस्करणों (जैसे 3. +) पर देख रहे हैं, तो आप यह भी सत्यापित करना चाह सकते हैं कि RVM http://beginrescueend.com/ का उपयोग करके और अपनी परियोजनाओं के लिए एक विशिष्ट रूबी और रत्न तैयार करने से आपका पर्यावरण साफ है ।

प्रति-प्रोजेक्ट के आधार पर एक .rvmrc फ़ाइल का उपयोग करें, यह गारंटी देगा कि आप अपने सिस्टम में पुराने सिस्टम रत्नों को प्राप्त नहीं कर रहे हैं। जो मुझे पहले काट चुका है।

यह उत्पन्न Rakefiles और इस तरह के आसपास बंदर को होने से रोकता है।


0

बंडल निष्पादित रेक डीबी: माइग्रेट आपके रूबी संस्करण के मुद्दों को हल करेगा


यह केवल तभी काम करता है जब आपके पास अपने जेमफाइल में रेक का वर्किंग वर्जन हो और टाइपिंग "रेक" आपके पैट में स्थापित कुछ अलग वर्जन का उपयोग कर रहा हो
RyanHennig
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.