NoMethodError : 레이크 11로 업그레이드 한 후 정의되지 않은 메소드 'last_comment'


130

어떤 rake작업을 실행할 때 다음을 얻습니다.

NoMethodError : 정의되지 않은 메소드 'last_comment'

그 후에 bundle update새 버전의 레이크 버전 version을 끌어 들였습니다 11.0.1.

$ grep rake Gemfile.lock
       rake
       rake (>= 0.8.7)
     rake (11.0.1)
       rake
$ bundle update
$ bundle exec rake db:drop # any rake task

NoMethodError : # <Rake :: Application : 0x007ff0cf37be38>에 대해 정의되지 않은 메소드 'last_comment'

버전

  • 레일 3.2.11
  • 레이크 11.0.1

답변:


159

레이크 11.0.1 제거last_comment 방법 어느레일 2.3rspec-core (<3.4.4)가 사용됩니다. 따라서 패치가 출시 될 때까지 Gemfile에서 이전 버전으로 갈퀴를 고정해야합니다.

gem 'rake', '< 11.0'

그때:

$ bundle update
$ grep rake Gemfile.lock 
      rake
      rake (>= 0.8.7)
    rake (10.5.0)
      rake
  rake (< 11.0)

우리는 지금 last_comment방법을 가지고 있으며 rake작업이 다시 작동 하는 레이크 10.5.0을 사용 하고 있습니다.

업데이트 : 이것은 rspec에서 수정되었으므로 rspec을 업데이트하면됩니다.


내가 사용해야하는 bundle exec이, 어떻게 가만히 사용하기 위해 수행 한 후 rake번들 간부없이 ??
svelandiag

"Rails 2.3"이 주석을 사용한다는 것을 명확히 할 수 있습니까? 저는 Rails 4를 사용하고 rake db:create:all있으며이 예외가 발생합니다.
yekta

@yekta Rails 2.3은 Rake가라는 메소드를 가질 것으로 예상 last_comment합니다. 코드베이스에서는 이것이 기억 나지 않습니다. Rails 4도 전화를해야할지 모르겠습니다 last_comment. 하지만 당신은 레일은 레일 4 분기 및 그렙 "last_comment"의에로 전환 한 코드베이스 체크 아웃 할 수 Rakefile*.task.
Kris

7
아직도 2017 년에 우리의 베이컨을 저장,이 주셔서 감사합니다
닉 Schwaderer

2
@luke rspec 3.5 이상
Kris

73

Rails 빠른 수정은 ./Rakefile앱 폴더에서 편집 할 수 있습니다.

호출하기 전에 다음 행을 추가하십시오 Rails.application.load_tasks.

module TempFixForRakeLastComment
  def last_comment
    last_description
  end 
end
Rake::Application.send :include, TempFixForRakeLastComment

전체 Rakefile가 다음과 같이 보일 수 있습니다.

  require File.expand_path('../config/application', __FILE__)
  require 'rake'
  require 'resque/tasks'

+ # temp fix for NoMethodError: undefined method `last_comment'
+ # remove when fixed in Rake 11.x
+ module TempFixForRakeLastComment
+   def last_comment
+     last_description
+   end 
+ end
+ Rake::Application.send :include, TempFixForRakeLastComment
+ ### end of temfix
+ 
  task "resque:preload" => :environment

  Rails.application.load_tasks

감사. Rake 11.1.0
sethcall

10
좋은, 내 명성의 5 분 간다 : D
equivalent8

3
제거 last_comment 가 되 돌린 것처럼 보이고 이제 레이크 12.0에서 제거됩니다.
Kris

3
레이크 12.0.0으로 업그레이드 한 후이 오류가 발생하기 시작했습니다. @ equivalent8의 임시 수정은 나를 위해 일했습니다.
블랙 우드

1
rspec-core-3.5.4로 업그레이드하면이 문제가 해결 되었으며이 답변에서 원숭이 패치를 제거 할 수있었습니다.
neontapir

27

최신 Rspec보석으로 업데이트 하면 작동합니다.

bundle update rspec-rails


7
에 StackOverflow에 내 자신의 대답을 찾기 - 3 년 I의 한을 쓴 이후로하는 것은 - 아직 : 마법처럼 작동
갈 Bracha의

3
이것은 "항상"좋은 솔루션이 아니며, 호환되지 않는 rspec -rails 버전을 설치할 수 있으므로 항상 사용할 verison을 지정하는 것이 좋습니다.
Arnold Roa

21

그냥 보석을 업그레이드하십시오 rspec-rails

지금: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'

안아!


1
gem 'rspec-rails', '~> 3.6'내 라이브를 구 해주셔서 감사합니다 !! 그리고 내 코드 안에 last_comment와 같은 것이 있다고 생각했습니다! LOL
1735921

20

이것은 이미 해결 된 레이크 문제입니다 .

@ equivalent8의 답변은 원숭이 패치이며 피해야합니다.

@Kris가 지적했듯이 이것은에 격리 된 문제입니다 rake 11.0.1. @Kris가 그의 답변을 게시 한 이후, 새로운 버전의 Rake를 사용할 수 있으며 이상적으로는 시간을 유지하면서 이전 버전의 레이크에 고정되지 않을 수 있습니다. 나를 믿어, 나는 거기에 있었고 당신이 도울 수 있다면 좋은 생각이 아닙니다. 또한 이것은 Rails 2.3 또는 모든 버전의 레일에서는 문제가되지 않습니다.

모든 레이크 < v11.0.1또는 > v11.0.1 and < v12작동하지만 여전히 해결 방법이므로 피해야합니다. 이상적으로 당신은 시간과 함께 머물 수 있습니다.

때문에 last_comment의존성을 사용 중지되고 자체가 업그레이드해야합니다. 제 경우에는 rspec-core우연히 v3.4.4 에서만 이것을 고쳤습니다 .

수정

호출하지 않는 버전으로 종속성을 업그레이드 last_comment하지만 호출 last_description대신. 아마도 3.4.4 이상으로 rspec업그레이드 rspec-core하면 문제가 해결됩니다. rspec-core<3.4.4 통화 last_comment.

당신의 의존성에 호출하지 않는 버전이 last_description없다면, 좋은 시민이되고 그것을 고치기 위해 PR을 제출하십시오 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.