Các plugin kiểu Rails 2.3 và cảnh báo khấu hao đang chạy tác vụ trong Heroku


155

Tôi đang nâng cấp lên Rails 3.2 và chạy rake db: di chuyển cho tôi một số lỗi về hình thức:

CẢNH BÁO KHAI THÁC: Bạn có các plugin kiểu Rails 2.3 trong nhà cung cấp / plugin! Hỗ trợ cho các plugin này sẽ bị xóa trong Rails 4.0. Di chuyển chúng ra và gói chúng trong Gemfile của bạn hoặc gấp chúng vào ứng dụng của bạn dưới dạng lib / myplugin / * và config / khởi tạo / myplugin.rb. Xem ghi chú phát hành để biết thêm về điều này: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-release . (được gọi từ tại / app / Rakefile: 7)

Điều khó hiểu là vendor/pluginsthư mục của tôi trống - có thư mục bổ trợ nào khác mà nó tham chiếu không?


1
Tôi thậm chí còn lúng túng hơn khi tôi DID có đồ đạc ở đó, nhưng sau khi gỡ bỏ nó vẫn gặp lỗi từ Heroku! Câu hỏi tuyệt vời, câu trả lời tuyệt vời
Phantomwhale

Câu trả lời:


203

Bạn đang sử dụng Heroku?

Heroku sẽ tiêm các plugin trong ứng dụng Rails 3.x .. Để tránh việc tiêm này trong Rails 3, hãy bao gồm đá quý rails_12factor trong ứng dụng của bạn. ( Hỗ trợ Heroku Ruby 2013-10-26)

Đá quý rails_12factor cũng được yêu cầu trong rails 4.

Nếu viên ngọc này không có trong ứng dụng của bạn, bạn sẽ nhận được cảnh báo trong khi triển khai và tài sản và nhật ký của bạn sẽ không hoạt động. (Đường ray 4 trên Heroku 2013-10-26)

Gần đây như 2013-08, heroku luôn tiêm các plugin trong rails 3 ứng dụng, thậm chí cả các ứng dụng có đá quý được đề xuất. Đây là một vấn đề với gói ruby ​​và đã được sửa bởi PR 11 , được hợp nhất vào ngày 2013-08-06.


1
Đúng, tôi nhận ra rằng tất cả các cảnh báo đến từ các kịch bản và nhật ký Heroku của tôi. Tôi sẽ cho rằng (a) đó là việc tiêm plugin và (b) rằng nhóm Heroku sẽ khắc phục điều này trước khi nó trở thành một vấn đề thực sự.
sợ hãi_fool

Tôi là một người mới và tôi hơi bế tắc về cách tôi chỉnh sửa đường ray-3.2.0. Bạn có thể vui lòng giúp đỡ.
Benjamin

@vezu Tôi khuyên bạn không nên bắt đầu. Đây là thứ đã từng phổ biến trước khi chúng tôi bắt đầu sử dụng trình đóng gói, nhưng hiện tại nó không có khả năng hoạt động và có lẽ sẽ chỉ phá vỡ mọi thứ.
Matthew Rudy

2
Tôi đã thử thêm trình khởi chạy gist.github.com/1709421 nhưng nó không hoạt động (tôi đoán các plugin được tải sớm hơn trình khởi chạy ứng dụng). Đề nghị của tôi là không lo lắng ... nó chỉ là tiếng ồn.
Matthew Rudy

3
một năm sau ... không có thay đổi gì từ heroku.
Courtimas

12

Bạn co thể thử

::ActiveSupport::Deprecation.silenced = true

trong bạn production.rbvì nó chỉ là tiếng ồn.


5
Lý tưởng nhất là người ta sẽ chỉ ngăn chặn cảnh báo cụ thể này, bạn có biết nếu điều đó có thể không?
Vincent

nếu bạn làm điều đó trong sản
xuất.rb

2
Không đàn áp các cảnh báo cho tôi
Leopd

6
Một cách để ngăn chặn cảnh báo này là thêm phần sau vào ứng ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
dụng.rb

8

trong cấu hình / môi trường.rb thêm:

ActiveSupport::Deprecation.silenced = true 

trước khi khởi tạo đường ray, như vậy:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                               

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

Tương tự như vậy để vô hiệu hóa các cảnh báo trong các tác vụ cào, hãy chèn cấu hình im lặng gần đầu Rakefile của bạn:

# Load the rails application                                                                                                                                             
require File.expand_path('../application', __FILE__)

ActiveSupport::Deprecation.silenced = true                                                                                                                           

# Initialize the rails application                                                                                                                                       
MyApp::Application.initialize!

Bạn có thể tùy ý bọc cái này trong một khối để chỉ im lặng trong sản xuất:

if ENV['RAILS_ENV'] == "production"
  ActiveSupport::Deprecation.silenced = true
end

Hmm .. điều này cũng không loại bỏ cảnh báo của tôi.
Martin

Ban đầu tôi đã đưa ra câu trả lời này cho hai ý kiến ​​trên, nhưng thực tế nó đã làm việc cho tôi. Chạy ray 3.2.6. YMMV.
Noach Magedman

4

Cách tiếp cận tốt nhất tôi đã tìm thấy được ghi lại ở đây . Đây là giả sử bạn đã tìm kiếm và tìm thấy câu hỏi này bởi vì bạn làm có plugin kiểu cũ.

Tôi đã sử dụng Make it not a gem gem , vì tôi cần có khả năng bật / tắt plugin trong quá trình triển khai capistrano của mình, dựa trên hương vị của ứng dụng tôi đang triển khai. Trước khi tôi sử dụng config.plugins để chỉ định sử dụng plugin nào. Với cách tiếp cận này, tôi đang sử dụng "yêu cầu" trên config.b Before_configuration thay thế.


+1. Tôi đã kết thúc việc sử dụng Matt Coneybeare cung cấp cho bạn một liên kết hướng dẫn tốt đẹp (được tìm thấy trong trang @yuri được liên kết) để chuyển đổi các plugin 2.3 ray đơn giản của tôi thành 3.2. Tôi thích giải pháp này vì nó không chỉ im lặng cảnh báo, nó thực sự sửa chúng.
Giê-rê-mi

1

Chỉ cần đặt miếng vá khỉ vào /lib/silence_heroku_warnings.rb

module Rails
  class Plugin < Engine

    alias :not_silenced_initialize :initialize

    def initialize(root)
      ActiveSupport::Deprecation.silence{ self.send :not_silenced_initialize, root }
    end

  end
end

và yêu cầu nó config/application.rbngay sau khi yêu cầu Rails:

require 'rails/all'
require File.expand_path('../../lib/silence_heroku_warnings', __FILE__)

Tất cả các khấu hao từ các plugin kiểu 2.x nên được tắt tiếng. Khấu hao khác sẽ hiển thị.


1

Một cách sạch hơn là chỉ im lặng cảnh báo, đây là những gì bạn có thể làm.

Đối với việc tiêm logger, bạn có thể thử sử dụng viên ngọc mới của HerokuJared Beck đã đề cập trong phần trả lời của anh ta ở trên .

Thay vào đó, những gì chúng tôi đã làm là:

Bạn có thể ngăn Heroku tiêm các plugin của chính nó nếu bạn có một thư mục cùng tên trong vendor/pluginsthư mục của mình . Các thư mục chỉ cần tồn tại. Heroku sau đó sẽ không tiêm plugin của nó và nếu không có mã, Rails sẽ không phản đối với các cảnh báo không dùng nữa. Chúng tôi chỉ cần đặt một tập tin readme giải thích điều này vào:

vendor/plugins/rails_log_stdout/readme.md

Mục đích của plugin được tiêm của Heroku để ghi nhật ký là để bật ghi nhật ký theo kiểu Heroku (nó yêu cầu các bản ghi phải được gửi đến STDOUT, chứ không phải vào một tệp). Để lấy lại điều đó, chúng tôi đã làm những gì tôi mô tả trong câu trả lời này . Dù sao đi nữa, những hành vi mặc định của Heroku là cần thiết cho Unicorn, vì vậy chúng tôi có hai con chim trong một hòn đá.


Tốt hơn là thêm một tệp trống có tên .gitkeepnhà cung cấp / plugin / rails_log_stdout .gitkeeplà một quy ước để giữ một thư mục trống khi sử dụng git.
tmaier

Đủ công bằng, tôi thích sự dài dòng hơn một chút là tại sao, đó là lý do tại sao tôi thích cách tiếp cận readme. Bạn đúng mặc dù đó .gitkeeplà một quy ước.
Wolfram Arnold

0

Cách im lặng mới thông báo khấu hao là:

config.active_support.deprecation = :silence

trong config/environments/production.rbtập tin của bạn


3
Cũng không đàn áp những cảnh báo cho tôi.
Leopd

0

Có vẻ như Heroku cuối cùng đã giải quyết điều này.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
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.