[ruby-on-rails] Heroku에서 레일즈 2.3 스타일 플러그인 및 사용 중단 경고

Rails 3.2로 업그레이드하고 rake db : migrate를 실행하면 다음과 같은 형식의 오류가 발생합니다.

감가 상각 경고 : 공급 업체 / 플러그인에 Rails 2.3 스타일 플러그인이 있습니다! 이 플러그인에 대한 지원은 Rails 4.0에서 제거 될 것입니다. 그것들을 밖으로 옮기고 Gemfile에 묶거나 lib / myplugin / * 및 config / initializers / myplugin.rb로 앱에 접습니다. 이에 대한 자세한 내용은 http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released 에서 릴리즈 노트를 참조 하십시오 . (/ app / Rakefile : 7에서 호출)

당황한 것은 내 vendor/plugins디렉토리가 비어 있다는 것입니다. 참조하는 다른 플러그인 디렉토리가 있습니까?



답변

Heroku를 사용하고 있습니까?

Heroku는 Rails 3.x 애플리케이션에 플러그인을 주입 할 것입니다. Rails 3에서 이러한 주입을 피하려면 애플리케이션에 rails_12factor gem을 포함하십시오. ( Heroku Ruby 지원 2013-10-26)

rails_12factor gem은 rails 4에도 필요합니다.

이 gem이 응용 프로그램에 없으면 배포하는 동안 경고 메시지가 표시되고 자산과 로그가 작동하지 않습니다. ( Heroku 2013-10-26 레일 4 )

최근 2013-08 년까지 heroku는 항상 rails 3 앱, 권장 보석이 포함 된 앱에 플러그인을 삽입했습니다. 이것은 루비 빌드 팩의 문제였으며 2013 년 8 월 6 일에 통합 된 PR 11 로 수정되었습니다 .


답변

당신은 시도 할 수 있습니다

::ActiveSupport::Deprecation.silenced = true

당신에 production.rb그냥 소음 이후.


답변

config / environment.rb에서 다음을 추가하십시오.

ActiveSupport::Deprecation.silenced = true 

다음과 같이 레일을 초기화하기 전에 :

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

ActiveSupport::Deprecation.silenced = true

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

마찬가지로 레이크 작업에서 경고를 비활성화하려면 Rakefile 상단 근처에 소음 제거 구성을 삽입하십시오.

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

ActiveSupport::Deprecation.silenced = true

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

선택적으로 이것을 블록으로 감싸서 프로덕션 환경에서만 침묵시킬 수 있습니다.

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


답변

내가 찾은 가장 좋은 방법은 여기 에 문서화되어 있습니다 . 이것은 당신이 검색하고 있기 때문에이 질문에 발견 가정한다 이전 스타일의 플러그인을 가지고 있습니다.

필자는 배포 한 앱의 특징에 따라 Capistrano 배포 중에 플러그인을 켜고 끌 수 있어야했기 때문에 모든 부분 에서 보석이 아닌 Make를 사용했습니다 . config.plugins를 사용하여 사용할 플러그인을 지정하기 전에 이 방법으로 config.before_configuration에서 “require”를 대신 사용합니다.


답변

다음 원숭이 패치를 넣어 /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

그리고 그것을 필요 config/application.rb단지 레일을 요구 후 :

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

2.x 스타일 플러그인의 모든 지원 중단은 침묵되어야합니다. 다른 지원 중단이 표시됩니다.


답변

경고를 자동으로 처리하는 것보다 더 확실한 방법은 다음과 같습니다.

로거 주입 의 경우 Jared Beck이 위의 답변 에서 언급 한 Heroku의 새로운 보석 을 사용해보십시오 .

우리가 대신 한 것은 이것입니다.

vendor/plugins폴더에 동일한 이름의 디렉토리가 있으면 Heroku가 자체 플러그인을 주입하지 못하게 할 수 있습니다 . 폴더 만 있으면됩니다. 그러면 Heroku는 플러그인을 삽입하지 않으며 코드가 없으면 Rails는 지원 중단 경고를 거부하지 않습니다. 우리는 이것을 이것을 설명하는 readme 파일을 넣었습니다.

vendor/plugins/rails_log_stdout/readme.md

로깅을위한 Heroku의 삽입 된 플러그인의 목적은 Heroku 스타일 로깅을 설정하는 것입니다 (파일이 아닌 STDOUT에 로그를 보내야 함). 다시 돌려 드리기 위해, 우리는 이 답변 에서 설명한 것을 수행했습니다 . 어쨌든 Unicorn에는 Heroku의 기본 동작을 조정해야했기 때문에 하나의 돌에 두 마리의 새가 생겼습니다.


답변

지원 중단 알림을받는 새로운 방법은 다음과 같습니다.

config.active_support.deprecation = :silence

당신의 config/environments/production.rb파일.