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

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합니다.

도움이되기를 바랍니다.


5
그것은 나를 위해 작동하지 않았습니다. 나는 실제로 rake 0.9.1> gem uninstall rake -v = 0.9.1을 제거한 다음> bundle update 고맙습니다 Antonio

1
나는 Antonio와 동의한다 gem uninstall rake -v=0.9.1. 내가 레이크 0.9.1을 제거한다고 말했을 때 나는 . 명확하지 않은 나의 실수. 설명 Antonio 주셔서 감사합니다! 건배, 브라이언
브라이언 브루

13
나는 새로운 라이브러리가 작동하도록 만들 수있을 때 의도적으로 오래된 라이브러리를 사용하는 것이 좋지 않다고 생각합니다.
Smar 2011-06-11

2
더 간단한 해결책은 아래 NPatel에서 제안한 것입니다. Rakefile에 한 줄만 추가하면됩니다.
Slobodan Kovacevic 2011 년

이 결의안에는 운이 없었습니다. rake 0.9.1 또는 0.9.2를 제거한 후 번들 업데이트를 실행 한 후에도 동일한 오류가 발생했습니다.
Marc

111

include Rake::DSL응용 프로그램 load_tasks가 호출되기 전에 Rakefile에 추가 하는 것도 저에게 효과적이었습니다.

따라서 위의 사용자의 경우 DemoApp::Application.load_tasksRakefile에서 이전 입니다.


감사. "경고 : Rake DSL 메소드에 대한 전역 액세스가 더 이상 사용되지 않음"을 수정했습니다. 문제.
Slobodan Kovacevic 2011 년

이 문제를 해결하는 적절한 방법입니까?
Marc

2
@Marc, 현재 이것은 레일 3.0.8 이상으로 업그레이드하지 않고 내가 아는 유일한 수정입니다. 이 문제는 해당 릴리스에서 해결되었습니다 : github.com/rails/rails/commit/… . 더 나은 수정 사항을 찾으면 알려주십시오. 또한 경고에 따르면 적절한 수정이라고 생각합니다.
Patelify

1
이것이 제가 함께했던 해결책입니다. 나는 Rake 버전이 무엇과 함께 작동하는지 게임을하는 것보다 단순히 라인을 추가하는 것을 선호합니다.
jaydel 2011-06-20

2
이것은 1.9.2와 나를 위해 일한 레이크 0.9.2와 3.0.7 레일
스티븐 Chanin에게

5

설치 프로그램을 사용하여 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

주석에서 언급했듯이 위의 두 줄에서 앱 이름이 올바른지 확인하세요.


1
그리고 heroku rake db:migrate명령이 작동 require 'rake/dsl_definition'하도록하려면 rakefile (require 'rake'행 위에)도 추가 해야했습니다.
LikeMaBell

이 모든 작업은 저에게 효과적이지만 필요하지는 않습니다. NPatel의 제안은 잘 처리했습니다.
Scott Swezey 2011

0

3. +와 같은 Rails의 이후 버전에서 이것을보고 있다면 RVM http://beginrescueend.com/ 을 사용 하고 프로젝트를위한 특정 ruby ​​및 gemset을 생성 하여 환경이 깨끗한 지 확인할 수도 있습니다 .

프로젝트별로 .rvmrc 파일을 사용하면 이전 시스템 gem이 프로젝트에 포함되지 않도록 할 수 있습니다. 전에 물린 적이 있습니다.

이것은 생성 된 Rakefiles 등으로 주위에 원숭이가 생기는 것을 방지합니다.


0

bundle exec rake db : migrate는 루비 버전 문제를 해결합니다.


당신이 당신의 Gemfile에 레이크의 작업 버전이있는 경우에만 작동하고, 입력 "레이크는"당신의 경로에 설치 몇 가지 다른 버전 사용
RyanHennig
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.