Heroku에서 레일즈 2.3 스타일 플러그인 및 사용 중단 경고


155

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디렉토리가 비어 있다는 것입니다. 참조하는 다른 플러그인 디렉토리가 있습니까?


1
내가 거기에 물건을 가지고 있었기 때문에 나를 위해 더 preplexing했다. 그러나 그것을 제거한 후에도 여전히 Heroku에서 오류가 발생합니다! 좋은 질문, 좋은 답변
Phantomwhale

답변:


203

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 로 수정되었습니다 .


1
네, 모든 경고는 Heroku 스크립트와 로그에서 나왔다는 것을 알고 있습니다. 나는 (a) 플러그인 인젝션이고 (b) Heroku 팀이 실제 문제가되기 전에 이것을 고칠 것이라고 가정합니다.
fearless_fool

나는 초보자이며 나는 난간 -3.2.0을 편집하는 방법에 조금 붙어 있습니다. 도와주세요.
Benjamin

@vezu 시작하지 않는 것이 좋습니다. 이것은 우리가 번 들러를 사용하기 전에 일반적인 것이었지만 지금은 작동하지 않을 것입니다.
Matthew Rudy

2
이니셜 라이저 gist.github.com/1709421 추가를 시도했지만 작동하지 않습니다 (플러그인이 앱 이니셜 라이저보다 먼저로드 된 것 같습니다). 내 제안은 걱정하지 마십시오 ... 그저 소음입니다.
Matthew Rudy

3
일년 후 ... heroku에서 변화가 없습니다.
courtsimas

12

당신은 시도 할 수 있습니다

::ActiveSupport::Deprecation.silenced = true

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


5
이상적으로는이 특정 경고 만 억제 할 수 있습니다. 가능한지 알고 있습니까?
Vincent

당신이 production.rb에서 할 경우 개발에 오류가 표시되어야합니다 - 모든 사람이 development.rb에 반대를 설정 실패 할 경우
iterion가

2
경고를 표시하지 않음
Leopd

6
억제에 대한 하나의 해킹은이 경고는 application.rb에 다음을 추가하는 것입니다 :ActiveSupport::Deprecation.behavior = Proc.new { |msg, stack| $stderr.puts msg unless msg =~ /You have Rails 2.3-style plugins/ }
Liron Yahdav

8

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

흠 .. 이것도 내 경고를 제거하지 못했습니다.
Martin

나는 처음에 위의 두 가지 의견 중이 답변을 전달했지만 실제로 효과가있었습니다. 러닝 레일 3.2.6. YMMV.
Noach Magedman

4

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

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


+1. 나는 Matt Coneybeare를 사용하여 간단한 레일 2.3 플러그인을 3.2로 변환 하는 멋진 연습 링크 (@yuri 링크 페이지에 있음)를 제공합니다. 경고를 침묵시키지 않고 실제로 수정하기 때문에이 솔루션을 좋아했습니다.
예레미야

1

다음 원숭이 패치를 넣어 /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 스타일 플러그인의 모든 지원 중단은 침묵되어야합니다. 다른 지원 중단이 표시됩니다.


1

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

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

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

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

vendor/plugins/rails_log_stdout/readme.md

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


.gitkeepvendor / plugins / rails_log_stdout에 빈 파일을 추가하는 .gitkeep것이 git을 사용할 때 빈 디렉토리를 유지하는 규칙입니다.
tmaier

충분히 공정한 이유는 조금 더 자세한 정보를 선호하기 때문에 readme 방식이 마음에 들었습니다. 그것이 .gitkeep컨벤션 이지만 당신 말이 맞습니다 .
Wolfram Arnold 1

0

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

config.active_support.deprecation = :silence

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


3
또한 나에게 경고를 표시하지 않습니다.
Leopd

0

Heroku가 마침내 이것을 해결 한 것처럼 보입니다.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.