[ruby-on-rails] NoMethodError : 레이크 11로 업그레이드 한 후 정의되지 않은 메소드 ‘last_comment’

어떤 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


답변

레이크 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을 업데이트하면됩니다.


답변

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


답변

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

bundle update rspec-rails


답변

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

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

안아!


답변

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

@ 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을 제출하십시오 🙂


답변