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에 대한 다른 명령은 없습니다.
이 문제를 어떻게 해결할 수 있습니까?
답변
Stack Overflow 질문 Ruby on Rails and Rake problems : uninitialized constant Rake :: DSL 에서 이것을 발견했습니다 . @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
여러 버전의 gem이 설치되어있는 경우 버전을 선택하라는 메시지가 표시됩니다.
0.9.1을 정리 한 후
bundle update rake
마침내 내 데이터베이스 파일을 만들 수있었습니다. 을 사용 rake db:create
하고 있었지만에서도 작동 rake db:migrate
합니다.
도움이되기를 바랍니다.
답변
include Rake::DSL
응용 프로그램 load_tasks가 호출되기 전에 Rakefile에 추가 하는 것도 저에게 효과적이었습니다.
따라서 위의 사용자의 경우 DemoApp::Application.load_tasks
Rakefile에서 이전 입니다.
답변
설치 프로그램을 사용하여 Windows에서 동일한 문제가 발생했습니다. Ruby 1.9.2 및 Rails 3.0.9. 내가 한 일은 다음과 같습니다.
bundle update rake
bundle show rake
그 후 나는 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
주석에서 언급했듯이 위의 두 줄에서 앱 이름이 올바른지 확인하세요.
답변
3. +와 같은 Rails의 이후 버전에서 이것을보고 있다면 RVM http://beginrescueend.com/ 을 사용 하고 프로젝트를위한 특정 ruby 및 gemset을 생성 하여 환경이 깨끗한 지 확인할 수도 있습니다 .
프로젝트별로 .rvmrc 파일을 사용하면 이전 시스템 gem이 프로젝트에 포함되지 않도록 할 수 있습니다. 전에 물린 적이 있습니다.
이것은 생성 된 Rakefiles 등으로 주위에 원숭이가 생기는 것을 방지합니다.
답변
bundle exec rake db : migrate는 루비 버전 문제를 해결합니다.