Rails 2.3 สไตล์ปลั๊กอินและคำเตือนการเลิกใช้งานใน Heroku


155

ฉันกำลังอัพเกรดเป็น Rails 3.2 และการรัน rake db: migrate ทำให้ฉันมีข้อผิดพลาดหลายอย่างของแบบฟอร์ม:

คำเตือนการเลิกใช้งาน: คุณมีปลั๊กอิน 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
น่างงกว่าเดิมสำหรับฉันเพราะฉันมีของที่นั่น แต่หลังจากลบมันก็ยังคงเป็นข้อผิดพลาดจาก Heroku! คำถามที่ดีคำตอบที่ดี
Phantomwhale

คำตอบ:


203

คุณใช้ Heroku เหรอ?

Heroku จะฉีดปลั๊กอินในแอปพลิเคชัน Rails 3.x .. เพื่อหลีกเลี่ยงการฉีดใน Rails 3 นี้ให้รวม rails_12factor gem ในแอปพลิเคชันของคุณ ( Heroku Ruby Support 2013-10-26)

rails_12factor gem นั้นต้องการใน Rails 4 ด้วย

หากอัญมณีนี้ไม่ปรากฏในแอปพลิเคชันของคุณคุณจะได้รับคำเตือนขณะนำไปใช้และสินทรัพย์และบันทึกของคุณจะไม่ทำงาน ( Rails 4 on Heroku 2013-10-26)

เมื่อเร็ว ๆ นี้ในช่วง 2013-08, heroku ได้ทำการฉีดปลั๊กอินในแอพพลิเคชั่น 3 ตัวบนรางเสมอแม้กระทั่งแอพที่มีอัญมณีแนะนำ นี่เป็นปัญหาของ ruby ​​buildpack และได้รับการแก้ไขโดยPR 11รวมกับ 2013-08-06


1
ใช่ฉันรู้ว่าคำเตือนทั้งหมดมาจากสคริปต์และบันทึกของ Heroku ฉันจะสมมติว่า (a) เป็นปลั๊กอินและ (b) ทีม Heroku จะแก้ไขปัญหานี้ก่อนที่จะกลายเป็นปัญหาจริง
fearless_fool

ฉันเป็นมือใหม่และฉันก็ติดอยู่กับวิธีที่ฉันแก้ไข railties-3.2.0 คุณช่วยได้ไหม
เบนจามิ

@vezu ฉันขอแนะนำให้คุณอย่าเริ่ม นี่คือสิ่งที่เคยเป็นเรื่องธรรมดาก่อนที่เราจะเริ่มใช้งาน Bundler แต่ตอนนี้มันไม่น่าจะใช้ได้และอาจจะพัง
Matthew Rudy

2
ฉันพยายามเพิ่ม initializer gist.github.com/1709421แต่มันใช้งานไม่ได้ (ฉันเดาว่าโหลดปลั๊กอินเร็วกว่า initializer ของแอป) ข้อเสนอแนะของฉันคือไม่ต้องกังวล ... มันแค่เสียงรบกวน
Matthew Rudy

3
หนึ่งปีต่อมา ... ไม่มีการเปลี่ยนแปลงจาก heroku
courtimas

12

คุณสามารถลอง

::ActiveSupport::Deprecation.silenced = true

ในของคุณproduction.rbเพราะมันเป็นเพียงเสียงรบกวน


5
ในอุดมคติแล้วใครจะระงับคำเตือนนี้โดยเฉพาะคุณรู้หรือไม่ว่าเป็นไปได้?
Vincent

ถ้าคุณทำมันในการผลิต
rb

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

ตอนแรกฉันตอบคำถาม b / c ของความคิดเห็นสองข้อข้างต้น แต่ที่จริงแล้วมันได้ผลสำหรับฉัน รางวิ่ง 3.2.6 YMMV
Noach Magedman

4

วิธีที่ดีที่สุดที่ฉันได้พบเป็นเอกสารที่นี่ นี้จะสมมติว่าคุณค้นหาและพบคำถามนี้เพราะคุณทำมีปลั๊กอินแบบเก่า

ฉันไปกับMake it ไม่ใช่อัญมณีในทุกส่วนเพราะฉันต้องสามารถเปิด / ปิดปลั๊กอินในระหว่างการปรับใช้ capistrano ของฉันขึ้นอยู่กับรสชาติของแอพที่ฉันปรับใช้ ก่อนที่ฉันจะใช้ config.plugins เพื่อระบุปลั๊กอินที่จะใช้ ด้วยวิธีนี้ฉันใช้ "ต้องการ" ใน config.before_configuration แทน


+1 ฉันลงเอยด้วยการใช้Matt Coneybeare ให้ลิงค์แนะนำแบบดี (พบได้ในหน้า @yuri ที่เชื่อมโยง) เพื่อแปลงปลั๊กอิน 2.3 อันเรียบง่ายของฉันเป็น 3.2 ฉันชอบวิธีนี้เพราะมันไม่ได้เป็นเพียงแค่การเงียบคำเตือนมันแก้ไขได้จริง
เยเรมีย์

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หลังจากต้องใช้ Rails:

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

การคัดค้านทั้งหมดจากปลั๊กอินแบบ 2.x ควรถูกปิดเสียง การคัดค้านอื่น ๆ จะปรากฏขึ้น


1

วิธีที่สะอาดกว่าเพียงแค่การปิดปากเตือนนี่คือสิ่งที่คุณสามารถทำได้

สำหรับการฉีดตัดไม้ที่คุณสามารถลองใช้อัญมณีใหม่ Heroku ของที่Jared เบ็คกล่าวถึงในคำตอบของเขาดังกล่าวข้างต้น

สิ่งที่เราทำคือ:

คุณสามารถยับยั้ง Heroku จากการฉีดปลั๊กอินของตัวเองถ้าคุณมีไดเรกทอรีด้วยชื่อเดียวกันในvendor/pluginsโฟลเดอร์ของคุณ โฟลเดอร์นั้นต้องมีอยู่ Heroku จะไม่ทำการแทรกปลั๊กอินและหากไม่มีรหัส Rails จะไม่คัดค้านคำเตือนการคัดค้าน เราเพิ่งใส่ไฟล์ readme เพื่ออธิบายสิ่งนี้ใน:

vendor/plugins/rails_log_stdout/readme.md

วัตถุประสงค์ของปลั๊กอินสำหรับการฉีดของ Heroku สำหรับการบันทึกคือการเปิดการบันทึกในแบบของ Heroku (ต้องมีการส่งบันทึกไปยัง STDOUT ไม่ใช่ไฟล์) เพื่อให้ได้สิ่งนั้นกลับมาเราได้ทำสิ่งที่ฉันอธิบายไว้ในคำตอบนี้ ปรับแต่งพฤติกรรมเริ่มต้นของ Heroku นั้นเป็นสิ่งจำเป็นสำหรับยูนิคอร์นดังนั้นเราจึงมีนกสองตัวในหินก้อนเดียว


ควรเพิ่มไฟล์ว่างที่มีชื่อ.gitkeepให้กับผู้ขาย / plugins / rails_log_stdout ดีกว่า .gitkeepคือการประชุมเพื่อเก็บไดเรกทอรีว่างไว้เมื่อใช้ git
tmaier

ยุติธรรมพอฉันชอบการใช้คำฟุ่มเฟื่อยมากกว่าเล็กน้อยว่าทำไมนั่นเป็นเหตุผลที่ฉันชอบวิธี readme คุณคิดถูกว่า.gitkeepเป็นแบบแผน
Wolfram Arnold

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.