[ruby-on-rails] Ruby on Rails 및 Rake 문제 : 초기화되지 않은 상수 Rake :: DSL

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

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

$ 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>'

인터넷에서 비슷한 / 같은 오류가 있는지 살펴 봤는데 사람들은 그 오류를 보았습니다. 아무도 문제를 해결하지 못하는 것 같습니다!

이 문제를 어떻게 해결합니까?



답변

앞서 DHH트윗 . Rake .9.0은 Rails와 다른 몇 가지를 깨뜨립니다.

gem "rake", "0.8.7"

Gemfile에


답변

나는 이전 답변 직후에 약간의 연구를했습니다 (죄송합니다, 전에해야합니다).

모든 문제는 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가 잘 작동한다는 것을 의미합니다!


답변

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

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

require 'rake/dsl_definition'

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

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


답변

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

gem install rake

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


답변

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

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

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


답변

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

sudo gem install rake -v 0.8.7
sudo gem uninstall rake

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


답변

나와 같이 rake 0.8.7에 갇혀 있고 Rails 3.2.x를 사용하는 경우 railties는 Rake :: DSL에 대한 요구 사항을 추가합니다.

이 문제를 해결하려면 Rakefile 상단에 다음을 추가해야합니다.

module Rake
  module DSL
  end
end