ปัญหา Ruby on Rails และ Rake: Rake :: DSL ที่ไม่มีการกำหนดค่าเริ่มต้น


189

ฉันมีปัญหาที่น่าหงุดหงิดจริงๆ: Rakeกำลังโง่

นี่คือปัญหาที่เกิดขึ้น:

$ rails new test_app
$ rails generate scaffold new_scaffold field1:string field2:text

ทั้งสองทำงานได้ดี แต่เมื่อฉันทำสิ่งนี้

$ rake db:migrate

ฉันได้รับข้อผิดพลาดดังต่อไปนี้

(in /home/mikhail/test_app)
rake aborted!
uninitialized constant Rake::DSL
/usr/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:6:in `<module:Rake>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/tasklib.rb:3:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `require'
/usr/lib/ruby/gems/1.9.1/gems/rake-0.9.0/lib/rake/rdoctask.rb:20:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks/documentation.rake:1:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `load'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:15:in `block in <top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `each'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/tasks.rb:6:in `<top (required)>'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `require'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:214:in `initialize_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:139:in `load_tasks'
/usr/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/application.rb:77:in `method_missing'
/home/mikhail/test_app/Rakefile:7:in `<top (required)>'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `load'
/usr/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/usr/lib/ruby/1.9.1/rake.rb:1991:in `run'
/usr/bin/rake:31:in `<main>'

ฉันดูเกี่ยวกับอินเทอร์เน็ตเพื่อหาข้อผิดพลาดที่คล้ายกัน / เหมือนกันและผู้คนมีพวกเขาอยู่ ดูเหมือนจะไม่มีใครแก้ปัญหาได้!

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

คำตอบ:


193

ทวีตจาก DHHก่อนหน้านี้ Rake .9.0 ทำลาย Rails และสิ่งอื่น ๆ คุณต้อง:

gem "rake", "0.8.7"

ใน Gemfile ของคุณ


17
สิ่งนี้ใช้ได้สำหรับฉัน ฉันต้องทำbundle update rakeก่อน bundle show rakeแล้วฉันจะตรวจสอบกับ มันควรจะพูดว่า 0.8.7 rake db:migrateแล้วก็
B เซเว่น

26
gem "rake", "!= 0.9.0"หรือแม้กระทั่งการที่ดีกว่า: วิธีนี้จะหลีกเลี่ยงการปล่อย 0.9.0 ที่ใช้งานไม่ได้ แต่จะอัปเดตเป็นรุ่นใหม่กว่าเมื่อมีการเผยแพร่รุ่นที่ใหม่กว่า (การลบในภายหลังจะไม่เกิดความเสียหาย
Spiralis

6
@Spiralis ฉันยังพบปัญหากับรุ่น 0.9.2 ดังนั้นคุณอาจต้องเพิ่มบรรทัดนั้นสักสองสามเวอร์ชัน
dharmatech

3
การแก้ปัญหานี้ทำงานการทำงานสำหรับฉัน เช่น @dharmatech ฉันมีปัญหานี้มาแล้วheroku rake db:migrateและนี่ดูเหมือนจะแก้ไขได้ อย่าลืมเพิ่มและกระทำการเปลี่ยนแปลงเหล่านี้เพื่อคอมไพล์ก่อนที่จะดำเนินการต่อ);
pruett

1
สิ่งนี้อาจใช้ได้กับ Rails แต่ฉันต้องทำsudo gem install rakeเพื่อให้แน่ใจว่าrakeเวอร์ชั่นที่ฉันเรียกจากบรรทัดคำสั่งไม่ใช่ 0.8.7
Autumnsault

72

ฉันทำวิจัยหลังจากคำตอบก่อนหน้านี้ (ขออภัยฉันต้องทำก่อนหน้านี้)

ปัญหาทั้งหมดได้รับการแก้ไขด้วย Rake gem 0.9.2 .. ฉันทำตามขั้นตอนเหล่านี้แล้ว:

  • ฉันติดตั้งแล้วgem install rake -v=0.9.2(ฉันมีอัญมณี 0.9.1)
  • ลบ 0.9.1 ด้วย gem uninstall rake -v=0.9.1
  • อัปเดตด้วย bundle update
  • จากนั้นdb:migrateมีคำเตือนWARNING: Global access to Rake DSL methods is deprecated. Please....

    แก้ไขได้โดยการเพิ่มไฟล์ Rake ต่อไปนี้

    module ::YourApplicationName  
      class Application
        include Rake::DSL
      end
    end
    
  • ฉันmodule ::RakeFileUtils extend Rake::FileUtilsExtendเลือกใช้ตัวเลือกที่ @databyte

หมายความว่า Rake gem 0.9.2 ทำงานได้ดี!


ทำตามสามขั้นตอนแรกและฉันไม่ได้รับคำเตือนเลยไม่ได้ยุ่งกับส่วนที่เหลือขอบคุณสำหรับคำแนะนำ
Abe Petrillo

1
สิ่งนี้ทำให้ฉันต้องถาม ... ทำไมฉันจึงควรแฮ็ค Rake เพื่อรักษาคุณสมบัตินั้นเอาไว้? เรคพยายามทำอะไรและฉันควรใช้อะไรตอนนี้
Ryanmt

@Arrumaco, ไดเร็กทอรีสำหรับไฟล์ Rake คืออะไร?
Ctak

มันคุ้มค่าสังเกตว่านอกจากไปRakeFileควรจะเป็นก่อนrequire 'rake'- จับฉันออก :)
คีแรนอาร์เชอร์

12
ปัญหาเดียวกัน แต่ฉันมีคราดอยู่แล้ว (0.9.2, 0.8.7) การติดตั้งใหม่ 0.9.2 ดูเหมือนว่าจะแก้ไขปัญหาแม้ว่า: 1) gem uninstall rake -v=0.9.22)gem install rake -v=0.9.2
DK

54

ผ่านบทที่ 2 ของ Railstutorial (demo_app) และพบปัญหานี้ ฉันลองคำตอบทั้งหมดที่ระบุไว้ที่นี่ แต่ไม่สามารถใช้งานได้จนกว่าฉันจะทำสิ่งนี้:

วางสิ่งนี้ใน Rakefile ของคุณข้างต้นต้องการ 'rake'

require 'rake/dsl_definition'

ผ่านวิธีการแก้ไขปัญหา Rake :: DSL ที่ไม่แน่นอนบน Heroku

ฉันยังแนะนำและส่งไฟล์ทั้งหมดไปที่ Github และ Heroku


ดูเหมือนว่าคำตอบที่ดีที่สุดตั้งแต่การลดระดับจาก 0.9.2 เป็น 0.8.7 จะเป็นการพึ่งพาอัญมณีบางอย่างขึ้นอยู่กับแต่ละกรณีเช่นของฉัน :) ขอบคุณ!
DiegoSalazar

มันไม่ทำงานสำหรับฉัน ฉันได้รับ "ไม่มีไฟล์ดังกล่าวที่จะโหลด - rake / dsl_definition" เมื่อทำ rake db: create
KMC

25

สิ่งที่ฉันต้องทำคือใช้:

gem install rake

ฉันมีเวอร์ชัน 0.9.2 แล้วจำเป็นต้องติดตั้ง


ว้าวมันใช้งานได้สำหรับฉัน แต่คุณสามารถอธิบายได้หรือไม่ว่าทำไมฉันถึงต้องทำการติดตั้ง rake ในขณะที่เรคควรจะมีอยู่แล้ว?
KMC

ฉันยังไม่เชี่ยวชาญจริงๆ แต่ความเข้าใจของฉันคือว่ามีความแตกต่างระหว่าง 'การติดตั้ง' ลงในพีซีของคุณและ 'ติดตั้ง' พวกเขาในการลงทะเบียนอัญมณี - ฉันสงสัยว่านี่เป็นเพราะการติดตั้ง Ruby ต้องการทราบว่า บนพีซีของคุณ บางทีนี่อาจเป็นสิ่งที่อาจเป็นไปโดยอัตโนมัติในอนาคตหรือเป็นไปโดยอัตโนมัติอยู่แล้วในการกระจายทับทิมบางอย่าง ...
Branstar

19

ติดตั้ง rake gem ใหม่อีกครั้งและควรจะทำงานได้ดี:

gem uninstall rake -v=0.9.2 
gem install rake -v=0.9.2

หากไม่ระบุรุ่น '0.8.7' ใน Gemfile ของคุณ


วิธีนี้ใช้ได้ผลสำหรับฉันและฉันไม่ต้องการลดระดับรุ่นลงไปอีก ..
Tarnschaf

ทำงานให้ฉันด้วยเช่นกันสำหรับ rake -v 0.9.2.2
Haspemulator

10

หากไม่ได้ใช้ Bundler:

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

จากนั้นเลือกถอนการติดตั้ง 0.9.0


นี้แก้ไขให้ฉันโดยไม่ต้อง bundler (ทางรถไฟ 2.3.8) ลองติดตั้ง rake 0.9.2 แล้ว แต่ก็ไม่ได้ทำการแก้ไข การติดตั้ง 0.8.7 และถอนการติดตั้ง 0.9.2 เป็นสิ่งที่ใช้งานได้ในที่สุด
Michael Durrant

8

ถ้าเหมือนฉันคุณติดอยู่กับ rake 0.8.7 และคุณใช้ Rails 3.2.x แล้ว Railties จะเพิ่มข้อกำหนดสำหรับ Rake :: DSL

ในการแก้ปัญหานี้ไปที่ด้านบนของ Rakefile คุณควรเพิ่ม:

module Rake
  module DSL
  end
end

7

ฉันแก้ไขปัญหาเดียวกันด้วยขั้นตอนต่อไปนี้:

ใน Gemfile:

gem 'rake', '0.9.2'

จากนั้นรันบนคอนโซล:

sudo bundle update rake

จากนั้นเพิ่มบรรทัดต่อไปนี้ใน Rakefile:

require 'rake/dsl_definition'
include Rake::DSL

6

Rails 3.1.rc1 ได้รับการอัพเดทแล้ว สำหรับ Rakefiles ของคุณเองคุณสามารถเพิ่มสิ่งนี้ก่อนการเรียกไปยัง load_tasks

module ::YourApplicationName
  class Application
    include Rake::DSL
  end
end

module ::RakeFileUtils
  extend Rake::FileUtilsExt
end

https://gist.github.com/4cd2bbe68f98f2f0249f

ปรับปรุง: ยังสังเกตเห็นว่ามันตอบแล้วที่นี่เช่นกัน: 'งาน' วิธีการที่ไม่ได้กำหนดโดยใช้ Rake 0.9.0



4

ฉันเป็นผู้ใช้ Windows XP และฉันมีปัญหาเดียวกัน

ฉันป้อน gem "rake", "0.8.7" ลงใน gemfile แล้วพิมพ์คำสั่งต่อไปนี้จากหน้าต่างคำสั่ง

bundle update rake

นี่เป็นการแก้ไขปัญหาของฉัน


ทำงานให้ฉันด้วยเหมือนวันนี้ เพียงแค่พยายามใช้รหัสรางบน Win7
arscariosus

4
  1. ไปที่เส้นทางโครงการของคุณ
  2. ชนิด bundle install --path=vendor/bundle
  3. ชนิด bundle exec rake db:migrate

bundle exec rails sในการเริ่มต้นชนิดของเซิร์ฟเวอร์ ใช้bundle execและคุณจะมั่นใจได้ว่าคุณใช้อัญมณีที่ถูกต้อง (เวอร์ชั่นที่จำเป็น) สำหรับโครงการของคุณ นอกจากนี้ผมจะแนะนำให้คุณเพิ่มvendor/bundleไป.gitignoreถ้าคุณใช้และทำให้นามแฝงสำหรับgit bundle execถ้าคุณใช้zshคุณสามารถทำตามวิธีนี้


3

เหมือนกับ Branstar ด้านบน - ขอบคุณ Branstar!

  • ระบบปฏิบัติการ: Windows Vista
  • ระดับ: ใหม่ทั้งหมดสำหรับ Ruby on Rails
  • ฉันติดตั้ง Ruby 1.9.2 แล้ว

ผมทำตามคำแนะนำในการเล่น Rails 3 บน Windows

ทั้งหมดทำงานจนถึงส่วน "rake db: migrate" ซึ่งให้ผลลัพธ์เหมือนกับโพสต์ต้นฉบับ

ฉันวิ่ง:

gem install rake

ฉันวิ่งอีกครั้ง:

rake db:migrate

จากนั้นฉันก็สามารถเริ่มต้นเซิร์ฟเวอร์ Ruby on Rails และมีทุกอย่างเข้าที่

ขอขอบคุณอีกครั้ง Branstar :-)


2

ฉันรู้สึกว่าคุณ (mikhailvs) มันน่าผิดหวังจริงๆ ฉันบ้าไปแล้วเกือบหนึ่งวันเต็ม ฉันยังถอนการติดตั้ง Ruby และไฟล์อ้างอิงทั้งหมดและปิดเครื่องคอมพิวเตอร์ของฉัน แต่ฉันยังคงมีปัญหาเดียวกัน

สิ่งที่ฉันได้รับจากข้อความแสดงข้อผิดพลาดคือปัญหาของ Rake 0.9.2 ดูเหมือนว่ายังไม่ได้ติดตั้งอย่างสมบูรณ์ ดังนั้นฉันต้องติดตั้งใหม่gem install rake -v=0.9.2

ฉันไม่แน่ใจว่าฉันติดตั้ง rake –v0.9.1 แล้วหรือยัง gem uninstall rake -v=0.9.1ดังนั้นเพื่อให้แน่ใจว่าฉันปลอดภัยฉันพยายามที่จะลบว่ารุ่นเก่าด้วย แต่จะแสดงให้ฉันเห็นข้อผิดพลาด

ERROR:  While executing gem ... (Gem::InstallError)
    cannot uninstall, check `gem list -d rake`

ตกลงดังนั้นฉันตรวจสอบไดเรกทอรี Rake ทั้งหมดบนพีซีของฉันและพบว่าฉันมี Rake 0.9.2 เท่านั้น rake db:migrateจากนั้นก็ให้ตรวจสอบว่าทุกอย่างก็ไม่เป็นไรผมอพยพด้วย และมันก็ได้ผล :)

ฉันคิดว่าฉันไม่มี Rake 0.9.1 เพราะฉันติดตั้ง Ruby ( rubyinstaller-1.9.2-p180 - บนระบบ Windows 7 ของฉัน) และอัญมณีทั้งหมดด้วย ในระหว่างนี้ Rake 0.9.2 ยังไม่ได้ติดตั้งอย่างสมบูรณ์


2

การถอนการติดตั้งด้วย"gem uninstall rake" ใช้งานได้สำหรับฉันฉันมี 2 รุ่นติดตั้งดังนั้นฉันเลยติดตั้งใหม่ทั้งหมด

"rake db: create"เพื่อให้แน่ใจว่ามีฐานข้อมูลอยู่แล้ว"rake db: migrate"เพื่อประทับตราดีล


2

ฉันมีปัญหาเดียวกันกับการใช้ Rake 0.9.2.2 ฉันแก้ไขปัญหานี้โดยใช้ bundle exec



0

ติดตั้ง rake 0.8.7 และถอนการติดตั้ง 0.9.2.2

$ gem install rake -v 0.8.7
$ gem uninstall rake -v 0.9.2.2

ตอนนี้ใช้

$ bundle exec rake db:migrate

ฉันคิดว่านี่จะช่วยคุณได้)


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