2012-01-27 27 views
153

Tôi đang nâng cấp lên Rails 3.2, và chạy rake db: di chuyển mang lại cho tôi một số lỗi có dạng:Rails plugin 2.3-phong cách và cảnh báo deprecation chạy nhiệm vụ trong Heroku

deprecation Chú ý: Bạn có Rails 2.3 các plugin kiểu 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/initializers/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-released. (được gọi từ/app/Rakefile: 7)

Thư mục vendor/plugins của tôi trống rỗng - có thư mục bổ sung nào khác mà nó tham chiếu không?

+1

Thậm chí còn phức tạp hơn cho tôi khi tôi DID có nội dung ở đó, nhưng sau khi xóa nó vẫn bị lỗi của Heroku! Câu hỏi hay, câu trả lời tuyệt vời – Phantomwhale

Trả lời

203

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

Heroku sẽ bơm plugins trong các ứng dụng 3.x Rails .. Để tránh tiêm này trong Rails 3, bao gồm đá quý rails_12factor trong ứng dụng của bạn. (Heroku Ruby Support 2013-10-26)

Các đá quý rails_12factor cũng là cần thiết trong đường ray 4.

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

Như thời gian gần đây như 2013-08, Heroku luôn tiêm plugins trong đường ray 3 ứng dụng, thậm chí ứng dụng với đá quý khuyến khích. Đây là một vấn đề với buildpack ruby, và đã được sửa bởi PR 11, được hợp nhất vào 2013-08-06.

+1

Vâng, tôi nhận ra rằng tất cả các cảnh báo đến từ các tập lệnh và nhật ký Heroku của tôi. Tôi sẽ giả định rằng (a) đó là tiêm chích và (b) nhóm Heroku sẽ sửa lỗi này trước khi nó trở thành vấn đề thực tế. –

+0

Im một newbie và tôi là một chút khó khăn về cách tôi chỉnh sửa railties-3.2.0. Bạn có thể vui lòng giúp đỡ. – Benjamin

+0

@vezu Tôi khuyên bạn không nên bắt đầu. Đây là một cái gì đó đã từng được sử dụng phổ biến trước khi chúng tôi bắt đầu sử dụng bundler, nhưng ngay bây giờ nó không thể làm việc, và có lẽ sẽ chỉ phá vỡ công cụ. –

12

Bạn có thể thử

::ActiveSupport::Deprecation.silenced = true 

trong production.rb của bạn vì 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 điều đó có thể xảy ra không? – Vincent

+0

nếu bạn làm điều đó trong production.rb bạn sẽ thấy các lỗi trong phát triển - nếu tất cả khác thất bại thiết lập ngược lại trong development.rb – iterion

+2

Không ngăn chặn các cảnh báo cho tôi – Leopd

0

Các phương pháp mới để bịt miệng báo deprecation là:

config.active_support.deprecation = :silence 

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

+3

Cũng không loại bỏ các cảnh báo cho tôi. – Leopd

+0

Không hoạt động với tôi –

4

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

Tôi đã đi với Làm cho nó không phải là một viên ngọc ở tất cả một phần, bởi vì tôi cần thiết để có thể bật/tắt plugin trong quá trình triển khai capistrano của tôi, 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 plugin nào sẽ sử dụng. Với cách tiếp cận này, tôi sử dụng "require" trên config.before_configuration để thay thế.

+0

+1. Tôi đã kết thúc bằng cách sử dụng [Matt Coneybeare cung cấp cho bạn một hướng dẫn tốt đẹp] (http://matt.coneybeare.me/how-to-convert-simple-rails-23-style-plugins/) liên kết (tìm thấy trong trang @yuri liên kết) để chuyển đổi đường ray đơn giản của tôi 2.3 plugin thành 3.2. Tôi thích giải pháp này bởi vì nó không chỉ làm im lặng các cảnh báo, nó thực sự sửa chúng. – Jeremiah

7

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

ActiveSupport::Deprecation.silenced = true 

trước đường ray khởi, 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ảnh báo trong nhiệm vụ cào 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 ý bao bọc nó trong một khối để chỉ im lặng trong sản xuất:

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

Hmm .. điều này cũng không xóa cảnh báo của tôi. – Martin

+1

Không hoạt động cho tôi hoặc là –

+0

Ban đầu tôi đã trả lời câu trả lời này b/c của hai ý kiến ​​trên, nhưng thực tế * đã * làm việc cho tôi. Chạy Rails 3.2.6. YMMV. –

1

Chỉ cần đặt sau 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ó trong config/application.rb ngay sau khi yêu cầu Rails:

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

Tất cả deprecations từ plugin 2.x kiểu nên im lặng. Các lần ngừng sử dụng khác sẽ hiển thị.

1

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

Để phun nhật ký, bạn có thể thử sử dụng Heroku's new gem rằng Jared Beck được đề cập trong his reply above.

Những gì chúng ta đã làm thay vì là thế này:

Bạn có thể ức chế Heroku từ tiêm plugin riêng của mình nếu bạn có một thư mục cùng tên trong thư mục vendor/plugins của bạn. 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 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 này vào:

vendor/plugins/rails_log_stdout/readme.md 

Mục đích của plugin Heroku của tiêm cho khai thác gỗ là bật Heroku kiểu khai thác gỗ (nó đòi hỏi các bản ghi sẽ được gửi đến STDOUT, không vào một tập tin). Để lấy lại điều đó, chúng tôi đã làm những gì tôi mô tả trong this answer. Tinh chỉnh hành vi mặc định của Heroku là cần thiết cho Unicorn dù sao, vì vậy chúng tôi có hai con chim trong một hòn đá.

+0

Thêm một tệp trống có tên '.gitkeep' vào nhà cung cấp/plugins/rails_log_stdout ' .gitkeep' là một quy ước để giữ một thư mục trống khi sử dụng git. – tmaier

+0

Đủ công bằng, tôi thích một chút chi tiết hơn về lý do tại sao, đó là lý do tại sao tôi thích cách tiếp cận readme. Bạn nói đúng rằng '.gitkeep' là một quy ước. –

0

Dường như Heroku cuối cùng đã giải quyết vấn đề này.

Injecting plugin 'rails_log_stdout' 
    Injecting plugin 'rails3_serve_static_assets' 
    Add 'rails_12factor' gem to your Gemfile to skip plugin injection 
Các vấn đề liên quan