Ruby on Rails 및 Rake 문제 : 초기화되지 않은 상수 Rake :: DSL


189

정말 실망스러운 문제가 있습니다. 레이크 가 멍청합니다.

문제가 발생하는 방법은 다음과 같습니다.

$ 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하여 해결하는 것 같습니다. 계속 진행하기 전에 이러한 변경 사항을 git에 추가하고 커밋하십시오.)
pruett

1
이것은 Rails에서 작동하지만 명령 줄에서 호출 sudo gem install rakerake버전이 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에 의해 제안 된 옵션을 생략했습니다 .

그것은 레이크 보석 0.9.2가 잘 작동한다는 것을 의미합니다!


처음 세 단계를 수행했는데 경고가 표시되지 않으므로 나머지는 신경 쓰지 않았습니다. 제안 해 주셔서 감사합니다!
Abe Petrillo

1
이것은 나에게 묻습니다 ... 왜 그 기능을 유지하기 위해 레이크를 해킹해야합니까? 레이크는 무엇을하려고합니까? 지금 어떻게해야합니까?
Ryanmt

@Arrumaco, Rake 파일의 디렉토리는 무엇입니까?
Ctak

또한, 상기에 추가가 있음을 주목할 가치가 RakeFile이전되어야한다 require 'rake'- :) 저를 붙 잡았다
인 Ciaran 아처에게

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

Railstutorial 2 장 (demo_app)을 살펴보고이 문제에 부딪쳤다. 여기에 나열된 다른 모든 답변을 시도했지만이 작업을 수행 할 때까지 작동하지 못했습니다.

위의 Rakefile에 'rake'가 필요합니다.

require 'rake/dsl_definition'

VIA는 어떻게 Heroku가에 초기화되지 않은 일정 레이크 :: DSL의 문제를 해결하기 위해?

또한 모든 파일을 다시 커밋하고 Github와 Heroku로 푸시했습니다.


0.9.2에서 0.8.7로 다운 그레이드하면 내 경우와 같은 각 경우에 따라 일부 보석 종속성이 손상되므로 가장 좋은 대답 인 것 같습니다 :) 감사합니다!
DiegoSalazar

그것은 나를 위해 작동하지 않습니다. rake db : create를 수행 할 때 "로드 할 파일이 없습니다-rake / dsl_definition"이 나타납니다.
KMC

25

내가해야 할 일은 사용이었습니다.

gem install rake

0.9.2 버전이 이미 설치되어 있어야합니다.


와우 나를 위해 일했다. 그러나 레이크가 이미 있어야하는 동안 레이크를 설치 해야하는 이유를 설명 할 수 있습니까?
KMC

나는 여전히 전문가는 아니지만 PC에 보석을 설치하는 것과 보석 레지스트리에 보석을 설치하는 것에는 차이가 있다는 것이 나의 이해입니다. 루비 설치가 어떤 보석인지 알고 있어야하기 때문입니다 PC 어디에서나. 아마도 이것은 미래에 자동화 될 수 있거나 이미 특정 루비 배포판에서 자동화 된 것입니다.
Branstar

19

레이크 보석을 다시 설치하고 그것을 해야 잘 작동 :

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

그렇지 않은 경우 Gemfile에 '0.8.7'버전을 지정하십시오.


이 접근 방식은 저에게
효과적이며

rake -v 0.9.2.2에 대해서만 나를 위해 일했습니다.
Haspemulator

10

번 들러를 사용하지 않는 경우 :

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

그런 다음 0.9.0을 제거하도록 선택하십시오.


이것은 번 들러 (레일 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


4

나는 같은 문제가 있었고 0.9.0 대신 레이크 0.8.7 보석을 사용해야했습니다.


4

저는 Windows XP 사용자이며 같은 문제가있었습니다.

gemfile에 gem "rake", "0.8.7"을 입력 한 다음 명령 창에서 다음을 입력했습니다.

bundle update rake

이것은 내 문제를 해결했습니다.


오늘도 저를 위해 일했습니다. Win7에서 레일을 코딩하려고합니다.
arscariosus

4
  1. 프로젝트 경로로 이동
  2. 유형 bundle install --path=vendor/bundle
  3. 유형 bundle exec rake db:migrate

서버 유형을 시작하려면 bundle exec rails s. 사용 번들 간부를 당신은 당신이 프로젝트에 적합한 보석 (필요한 버전)을 사용하는 것이 될 것입니다. 또한에 대한 별칭을 사용 하고 추가 vendor/bundle하는 .gitignore경우 추가 하는 것이 좋습니다 . 당신이 사용 하면 이 접근법을 따를 수 있습니다gitbundle execzsh


3

위의 Branstar와 동일-감사합니다 Branstar!

  • 운영체제 : Windows Vista
  • 레벨 : Ruby on Rails의 새로운 기능
  • 이미 Ruby 1.9.2를 설치했습니다

Windows 에서 Rails 3 실행 의 지침을 따랐습니다 .

"rake db : migrate"부분이 나에게 원래 게시물과 동일한 출력을 제공 할 때까지 모두 해결되었습니다.

나는 달렸다 :

gem install rake

나는 다시 달렸다 :

rake db:migrate

그런 다음 Ruby on Rails 서버를 시작할 수 있었고 모든 것이 준비되었습니다.

다시 감사합니다 Branstar :-)


2

나는 당신을 느낀다 (mikhailvs), 정말 실망 스럽다. 나는 하루 종일 거의 미쳐 가고 있었다. Ruby와 모든 종속 파일을 제거하고 PC를 종료했지만 여전히 같은 문제가 발생합니다.

오류 메시지에서 얻은 것은 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`

OK, 그래서 내 PC의 모든 Rake 디렉토리를 확인한 결과 Rake 0.9.2 만 있습니다. 그런 다음 모든 것이 제대로되었는지 확인하기 위해로 마이그레이션했습니다 rake db:migrate. 그리고 그것은 효과가 있었다 :)

Ruby ( rubyinstaller-1.9.2-p180- 내 Windows 7 시스템)와 모든 보석을 새로 설치했기 때문에 Rake 0.9.1이 없었 습니다. 그 동안 Rake 0.9.2가 완전히 설치되지 않았습니다.


2

함께 제거 "보석 제거 레이크" 나를 위해 일한, 내가 농담 깨끗한 다시 설치했다 그래서 2 버전이 설치되어 있었다.

"rake db : create" 를 사용하여 데이터베이스가 존재하는지 확인한 다음 "rake db : migrate" 를 사용하여 거래를 봉인하십시오.


2

Rake 0.9.2.2와 동일한 문제가 발생했습니다. 번들 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.