NoMethodError: phương thức không xác định `last_comment 'sau khi nâng cấp lên cào 11


130

Khi chạy bất kỳ raketác vụ nào tôi nhận được:

NoMethodError: phương thức không xác định `last_comment 'cho

Đây là sau bundle updateđó kéo trong phiên bản mới của cào, phiên bản 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: phương thức không xác định `last_comment 'cho # <Rake :: Application: 0x007ff0cf37be38>

Phiên bản

  • Đường ray 3.2.11
  • Cào 11.0.1

Câu trả lời:


159

Rake 11.0.1 loại bỏ các last_commentphương pháp đóĐường ray 2.3sử dụng rspec-core (<3.4.4). Do đó, cho đến khi / nếu một bản vá được phát hành, chúng ta cần ghim thành phiên bản cũ hơn trong Gemfile:

gem 'rake', '< 11.0'

sau đó:

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

Chúng tôi hiện đang sử dụng rake 10.5.0 vẫn có last_commentphương thức và các raketác vụ của chúng tôi sẽ hoạt động trở lại.

CẬP NHẬT : Điều này hiện đã được sửa trong rspec, vì vậy điều duy nhất cần thiết là cập nhật rspec.


Tôi phải sử dụng bundle execsau khi làm điều này, làm thế nào để vẫn sử dụng rakemà không có gói thực thi ??

Bạn có thể làm rõ "Rails 2.3" của bạn sử dụng nhận xét? Tôi đang ở Rails 4 và rake db:create:allném ngoại lệ này.
yekta

@yekta Rails 2.3 hy vọng Rake sẽ có một phương thức được gọi last_comment, trong đó trong cơ sở mã này, tôi không nhớ. Tôi không biết nếu Rails 4 cũng gọi last_comment. Nhưng bạn có thể kiểm tra codebase rails, chuyển sang nhánh Rails 4 và grep cho "last_comment" trong Rakefile*.task.
Kris

7
Cảm ơn bạn vì điều này, vẫn tiết kiệm thịt xông khói của chúng tôi vào năm 2017.
Nick Schwaderer

2
@luke rspec 3.5 trở lên.
Kris

73

trong Rails, có thể chỉnh sửa nhanh ./Rakefile(trong thư mục ứng dụng của bạn)

và thêm các dòng này trước khi gọi Rails.application.load_tasks:

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

vì vậy toàn bộ Rakefilecó thể trông giống như

  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

Cảm ơn. Không còn cần thiết kể từ Rake 11.1.0
sethcall 13/03/2016

10
tốt đẹp, có 5 phút nổi tiếng của tôi: D
tương

3
Có vẻ như việc loại bỏ last_comment đã được hoàn nguyên và bây giờ sẽ được xóa trong rake 12.0.
Kris

3
Sau khi nâng cấp lên rake 12.0.0 tôi bắt đầu thấy lỗi này. Sửa lỗi tạm thời @ tương đương8 làm việc cho tôi.
gỗ đen

1
Nâng cấp lên rspec-core-3.5.4 đã giải quyết điều này cho tôi và tôi đã có thể xóa bản vá khỉ trong câu trả lời này.
neontapir

27

Cập nhật lên Rspecđá quý mới nhất thực hiện công việc:

bundle update rspec-rails


7
Tìm câu trả lời của riêng tôi trên StackOverflow - 3 năm kể từ khi tôi viết nó - Vẫn hoạt động như ma thuật :)
Gal Bracha

3
đây không phải là "luôn luôn" là một giải pháp tốt, điều này có thể cài đặt phiên bản rspec -rails không tương thích, tốt hơn là luôn luôn chỉ định phiên bản sẽ sử dụng.
Arnold Roa

21

Chỉ cần nâng cấp đá quý rspec-rails

Hiện nay: gem 'rspec-rails', '~> 3.5', '>= 3.5.2'

những cái ôm!


1
gem 'rspec-rails', '~> 3.6'đã cứu sống tôi, cảm ơn rất nhiều !! Và tôi nghĩ rằng tôi có một cái gì đó giống như last_comment trong mã của tôi! LOL
dùng1735921

20

Đây là một vấn đề trong cào đã được giải quyết.

Câu trả lời của @ tương đương8 là một bản vá khỉ và nên tránh.

Như @Kris chỉ ra, đây là một vấn đề bị cô lập rake 11.0.1. Vì @Kris đã đăng câu trả lời của mình, có sẵn phiên bản mới của Rake và lý tưởng là bạn sẽ có thể ở lại với thời đại và không bị ghim vào một phiên bản cũ của cào. Hãy tin tôi, tôi đã từng ở đó và nó không phải là một ý tưởng tốt nếu bạn có thể giúp đỡ nó. Ngoài ra, đây không phải là vấn đề với Rails 2.3 hoặc bất kỳ phiên bản đường ray nào.

Bất kỳ Rake < v11.0.1hoặc > v11.0.1 and < v12sẽ hoạt động nhưng đây vẫn là một công việc xung quanh và cũng nên tránh; lý tưởng nhất là bạn sẽ có thể ở lại với thời đại.

last_commentđang bị phản đối, bản thân sự phụ thuộc nên được nâng cấp. Trong trường hợp của tôi, đó là rspec-coresự cố chỉ sửa lỗi này trong phiên bản.4.4 .

Sửa chữa

Nâng cấp sự phụ thuộc của bạn lên một phiên bản không gọi last_commentlast_descriptionthay vào đó gọi . Có lẽ rspecvà nâng cấp rspec-corelên 3.4.4 hoặc cao hơn sẽ khắc phục nó. rspec-core<3.4.4 cuộc gọi last_comment.

Nếu người phụ thuộc của bạn không có phiên bản không gọi last_description, hãy là một công dân tốt và gửi PR để sửa lỗi :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.