Heroku'da görev yürüten 2.3 tarzı eklentiler ve kullanımdan kaldırma uyarıları raylar


155

Rails 3.2'ye yükseltme yapıyorum ve komisyon db: migrate çalıştırıyorum bana formun birkaç hata veriyor:

DEPRECATION UYARI: Satıcı / eklentilerde Rails 2.3 tarzı eklentileriniz var! Bu eklentiler için destek Rails 4.0'da kaldırılacaktır. Bunları dışarı taşıyın ve Gemfile dosyasında toplayın veya uygulamanıza lib / myplugin / * ve config / initializers / myplugin.rb olarak katlayın. Bununla ilgili daha fazla bilgi için sürüm notlarına bakın: http://weblog.rubyonrails.org/2012/01/04/rails-3-2-0-rc2-has-been-released . (/ app / Rakefile adresinden çağrılır: 7)

Şaşırtıcı olan şey vendor/pluginsdizinimin boş olması - başvurduğu başka bir eklenti dizini var mı?


1
Orada bir şeyler var gibi benim için daha preplexing oldu, ama kaldırdıktan sonra hala Heroku hata gitmek! Harika soru, harika cevap
Phantomwhale

Yanıtlar:


203

Heroku mu kullanıyorsunuz?

Heroku, Rails 3.x uygulamalarına eklentiler enjekte edecektir. Rails 3'teki bu enjeksiyondan kaçınmak için, rails_12factor gemini uygulamanıza ekleyin. ( Heroku Ruby Desteği 2013-10-26)

Rails_12factor gem ayrıca raylar 4'te gereklidir.

Bu taş uygulamanızda yoksa, dağıtım sırasında bir uyarı alırsınız ve varlıklarınız ile günlükleriniz işlevsel olmaz. ( Heroku 2013-10-26'da Raylar 4 )

2013-08 kadar yakın zamanda, heroku her zaman raylar 3 uygulamalarında, hatta önerilen mücevherlere sahip uygulamalarda eklentiler enjekte etti. Bu yakut yapı paketi ile ilgili bir sorundu ve 2013-08-06'da birleştirilen PR 11 ile düzeltildi.


1
Evet, tüm uyarıların Heroku senaryolarım ve günlüklerimden geldiğini anlıyorum. (A) eklenti enjeksiyonları olduğunu ve (b) Heroku ekibinin bunu gerçek bir sorun haline gelmeden önce çözeceğini varsayacağım.
fearless_fool

Ben bir acemi ve ben nasıl ben railties-3.2.0 düzenlemek üzerinde biraz sıkışmış. Lütfen yardım edebilir misin.
Benjamin

@vezu Başlamamanızı tavsiye ederim. Bu, bundler'ı kullanmaya başlamadan önce yaygın olan bir şeydi, ancak şu anda çalışmak pek mümkün değil ve muhtemelen sadece bir şeyleri kıracak.
Matthew Rudy

2
Bir başlatıcısı gist.github.com/1709421 eklemeyi denedim ama işe yaramıyor (sanırım eklentiler uygulama başlatıcılardan daha erken yüklenir). Benim önerim endişelenmeyin ... onun sadece gürültü.
Matthew Rudy

3
bir yıl sonra ... heroku'dan değişiklik yok.
courtsimas

12

Deneyebilirsin

::ActiveSupport::Deprecation.silenced = true

Gözlerinde farklı production.rbsadece gürültü beri.


5
İdeal olarak, sadece bu uyarıyı bastırır, bunun mümkün olup olmadığını biliyor musunuz?
Vincent

production.rb içinde yaparsanız, geliştirme hatalarını görmelisiniz - eğer her şey başarısız olursa, development.rb
iterion

2
Benim için uyarıları bastırmamak
Leopd

6
Sadece bu uyarıyı bastırmak için bir kesmek, application.rb aşağıdakileri eklemektir: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 ekle:

ActiveSupport::Deprecation.silenced = true 

rayları başlatmadan önce, şöyle:

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

ActiveSupport::Deprecation.silenced = true                                                                                                                               

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

Komisyon görevlerindeki uyarıları devre dışı bırakmak için, Rakefile dosyanızın üst kısmına yakınlaştırma yapılandırmasını ekleyin:

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

ActiveSupport::Deprecation.silenced = true                                                                                                                           

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

İsteğe bağlı olarak, yalnızca üretimde susturmak için bir bloğa sarabilirsiniz:

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

Hmm .. bu da uyarımı kaldırmadı.
Martin

Başlangıçta iki yorumların üzerinde bu cevabı b / c kadar geçti, ama aslında yaptığı iş için beni. Koşu Rayları 3.2.6. YMMV.
Noach Magedman

4

Bulduğum en iyi yaklaşım burada belgeleniyor . Bu, eski stil eklentilerine sahip olduğunuz için bu soruyu aradığınızı ve bulduğunuzu varsayar .

Ben gittim hiç Make değil bir mücevher Ben dağıtma edildi app hangi lezzet dayalı benim capistrano dağıtım sırasında açık / eklentileri kapatmak edebilmek için gerekli çünkü, kısmen. Hangi eklentiyi kullanacağımı belirtmek için config.plugins kullanmadan önce. Bu yaklaşım ile yerine config.before_configuration bir "gerektirir" kullanıyorum.


+1. Matt Coneybeare'i kullanarak basit raylar 2.3 eklentileri 3.2'ye dönüştürmek için güzel bir geçiş bağlantısı (@yuri bağlantılı sayfasında bulundu) kullanarak sona erdi . Bu çözümü sevdim çünkü sadece uyarıları susturmakla kalmadı, aynı zamanda onları düzeltti.
Jeremiah

1

Aşağıdaki maymun yamasını /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

ve config/application.rbRaylar gerektirdikten hemen sonra gerektirir:

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

2.x tarzı eklentilerden tüm kullanımdan kaldırmalar susturulmalıdır. Diğer kullanım dışı bırakmalar ortaya çıkacak.


1

Uyarıları susturmaktan daha temiz bir yol, işte yapabileceğiniz şey.

Logger enjeksiyon için kullanmak deneyebilirsiniz Heroku yeni mücevher olduğunu Jared Beck belirtilen yukarıda onun cevapta .

Bunun yerine yaptığımız şudur:

Klasörünüzde aynı ada sahip bir dizininiz varsa Heroku'nun kendi eklentilerini enjekte etmesini engelleyebilirsiniz vendor/plugins. Klasörün olması yeterlidir. Heroku daha sonra eklentisini enjekte etmez ve kod yoksa, Rails kullanımdan çıkarma uyarılarına itiraz etmez. Bunu açıklayan bir benioku dosyasını koyduk:

vendor/plugins/rails_log_stdout/readme.md

Heroku'nun enjekte edilen eklentisinin amacı, Heroku tarzı günlük kaydını açmaktır (günlüklerin bir dosyaya değil STDOUT'a gönderilmesini gerektirir). Bunu geri almak için, bu cevapta tarif ettiğim şeyi yaptık . Unicorn için Heroku'nun varsayılan davranışlarında tweaks gerekiyordu, bu yüzden bir taşta iki kuşumuz var.


.gitkeepSağlayıcı / plugins / rails_log_stdout adında boş bir dosya eklemek daha iyi .gitkeepgit kullanırken boş bir dizin tutmak için bir kuraldır .
tmaier

Yeterince adil, nedenine ilişkin biraz daha ayrıntı vermeyi tercih ediyorum, bu yüzden benioku yaklaşımını sevdim. Haklısın, bu .gitkeepbir kongre.
Wolfram Arnold

0

Kullanımdan kaldırma bildirimlerini susturmanın yeni yolu:

config.active_support.deprecation = :silence

sizin de config/environments/production.rbdosyaya.


3
Ayrıca benim için uyarıları bastırmamak.
Leopd

0

Görünüşe göre Heroku nihayet bunu ele aldı.

   Injecting plugin 'rails_log_stdout'
   Injecting plugin 'rails3_serve_static_assets'
   Add 'rails_12factor' gem to your Gemfile to skip plugin injection
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.