เลิกใช้การเข้าถึงวิธีการ Rake DSL ทั่วโลกแล้ว


86

ฉันกำลังทำงานผ่านหนังสือบทช่วยสอน Ruby on Rails 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'

ฉันไม่แน่ใจว่าจะทำอย่างไรกับมันหรือจะทำงานกับมันอย่างไร ฉันไม่รู้คำสั่งอื่นใดสำหรับ Rake

ฉันจะแก้ไขปัญหานี้ได้อย่างไร?

คำตอบ:


64

ฉันพบนี้ในกองมากเกินคำถามRuby on Rails และปัญหาคราด: คราดคงเตรียม มันอ้างถึงทวีต @DHH

ใส่สิ่งต่อไปนี้ใน Gemfile ของคุณ

gem "rake", "0.8.7"

คุณอาจเห็นบางอย่างเช่น

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

ฉันยังคงมีสำเนาของ Rake 0.9.1 อยู่ในไดเร็กทอรีของฉันดังนั้นฉันจึงลบมัน

คุณสามารถ "ลบ" Rake 0.9.1 ได้โดยเรียกใช้คำสั่งต่อไปนี้:

gem uninstall rake -v=0.9.1

หากคุณติดตั้งอัญมณีหลายเวอร์ชันคุณจะได้รับแจ้งให้เลือกเวอร์ชัน

หลังจากล้าง 0.9.1 ออกแล้วฉันก็วิ่ง

bundle update rake

และในที่สุดก็สามารถสร้างไฟล์ฐานข้อมูลของฉันได้ ฉันใช้อยู่rake db:createแต่มันก็น่าจะใช้ได้rake db:migrateเช่นกัน

ฉันหวังว่ามันจะช่วยได้


5
นั่นไม่ได้ผลสำหรับฉัน ฉันต้องลบ rake 0.9.1> gem uninstall rake -v = 0.9.1 แล้ว> อัปเดตกลุ่มขอบคุณ Antonio

1
ผมเห็นด้วยกับอันโตนิโอ - เมื่อฉันบอกว่าจะเอาคราด 0.9.1 gem uninstall rake -v=0.9.1ฉันหมายผ่านการใช้ ความผิดพลาดของฉันที่ไม่ทำให้มันชัดเจน ขอบคุณสำหรับคำชี้แจงอันโตนิโอ! Cheers, Brian
Brian Bruijn

13
ฉันไม่คิดว่าจะเป็นการดีที่จะใช้ไลบรารีเก่าโดยเจตนาเมื่อสามารถสร้างห้องสมุดใหม่ให้ใช้งานได้ดูความคิดเห็นด้านล่าง
Smar

2
วิธีแก้ปัญหาที่ง่ายกว่านั้นคือวิธีที่ NPatel แนะนำด้านล่าง เพียงเพิ่มหนึ่งบรรทัดใน Rakefile
Slobodan Kovacevic

ฉันไม่มีโชคกับความละเอียดนี้ ยังคงมีข้อผิดพลาดเดิมหลังจากถอนการติดตั้ง rake 0.9.1 หรือ 0.9.2 จากนั้นเรียกใช้การอัปเดตกลุ่ม
Marc

111

การเพิ่มinclude Rake::DSLลงใน Rakefile ก่อนที่จะเรียกแอปพลิเคชัน load_tasks ก็ใช้ได้ผลสำหรับฉันเช่นกัน

ดังนั้นในกรณีของผู้ใช้ข้างต้นก่อนDemoApp::Application.load_tasksใน Rakefile


ขอบคุณ. แก้ไข "คำเตือน: การเข้าถึงวิธีการ Rake DSL ทั่วโลกเลิกใช้แล้ว" ปัญหา.
Slobodan Kovacevic

นี่เป็นวิธีที่เหมาะสมในการแก้ไขปัญหานี้หรือไม่
Marc

2
@Marc ปัจจุบันนี่เป็นวิธีแก้ไขเดียวที่ฉันรู้โดยไม่ต้องอัปเกรดเป็นราง 3.0.8 หรือสูงกว่า ปัญหานี้แก้ไขได้ในรุ่นที่: github.com/rails/rails/commit/... หากคุณพบวิธีแก้ไขที่ดีขึ้นโปรดแจ้งให้เราทราบ ตามคำเตือนฉันคิดว่ามันเป็นการแก้ไขที่เหมาะสม
Patelify

1
นี่คือวิธีแก้ปัญหาที่ฉันใช้ ฉันต้องการเพียงแค่เพิ่มบรรทัดมากกว่าที่จะเล่นเกมที่ Rake เวอร์ชันใดใช้งานได้กับอะไร
jaydel

2
สิ่งนี้ใช้ได้กับฉันด้วย 1.9.2 และ Rails 3.0.7 พร้อม Rake 0.9.2
Steven Chanin

5

ฉันประสบปัญหาเดียวกันใน Windows กับโปรแกรมติดตั้ง Ruby 1.9.2 และ Rails 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'ใน rakefile ด้วย (เหนือบรรทัดต้องการ 'rake')
LikeMaBell

การทำทั้งหมดนี้ได้ผลสำหรับฉัน แต่ไม่จำเป็น ข้อเสนอแนะของ NPatel จัดการได้ดี
Scott Swezey

0

หากคุณเห็นสิ่งนี้ใน Rails เวอร์ชันที่ใหม่กว่า (เช่น 3. +) คุณอาจต้องการตรวจสอบว่าสภาพแวดล้อมของคุณสะอาดโดยใช้ RVM http://beginrescueend.com/และสร้างทับทิมและอัญมณีเฉพาะสำหรับโครงการของคุณ

ใช้ไฟล์. rvmrc เป็นรายโปรเจ็กต์สิ่งนี้จะรับประกันได้ว่าคุณจะไม่ได้รับอัญมณีระบบที่เก่ากว่าในโครงการของคุณ ซึ่งเคยกัดฉันมาก่อน.

สิ่งนี้ช่วยป้องกันไม่ให้ลิงไปรอบ ๆ ด้วย Rakefiles ที่สร้างขึ้นและอื่น ๆ


0

บันเดิล exec rake db: migrate จะช่วยแก้ปัญหารุ่น Ruby ของคุณ


วิธีนี้ใช้ได้เฉพาะเมื่อคุณมีคราดเวอร์ชันที่ใช้งานได้ใน Gemfile ของคุณและการพิมพ์ "rake" กำลังใช้เวอร์ชันอื่นที่ติดตั้งใน PATH ของคุณ
RyanHennig
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.