【问题标题】:How to suppress warning on PaperTrail gem with Sinatra app?如何使用 Sinatra 应用程序抑制 PaperTrail gem 上的警告?
【发布时间】:2017-04-27 20:40:45
【问题描述】:

弃用警告:PaperTrail.track_associations 尚未设置。从 PaperTrail 5 开始,它默认为 false。跟踪关联是一项实验性功能,因此我们建议在 config/initializers/paper_trail.rb 中设置 PaperTrail.config.track_associations = false。 (从 /Users/george/.rbenv/versions/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:68 的需求调用) 运行选项:

由于这不是 Rails 应用程序,因此没有 config/initializers/paper_trail.rb。查看了https://github.com/airblade/paper_trail/blob/master/lib/generators/paper_trail/install_generator.rb,但没有看到配置文件的生成器。

如果我这样做

require 'paper_trail'
PaperTrail.config.track_associations = false

它仍然发出警告。

也试过了:

def PaperTrail; end
PaperTrail.config.track_associations = false
require 'paper_trail'

这是一款“经典”的 Sinatra 应用。

【问题讨论】:

    标签: ruby sinatra paper-trail-gem


    【解决方案1】:

    发生这种情况的原因是由于调用require 'paper_trail' 初始化PaperTrail.config 对象:this 行导致需要this 文件,a part of which 被执行导致初始化config单身人士。我们可以通过先设置 config 对象,然后再调用顶级 paper_trail 文件来解决这个问题。

    # app.rb
    
    require 'sinatra'
    require 'paper_trail/config'
    
    config = PaperTrail::Config.instance
    config.track_associations = true
    
    # require models here
    Dir["#{Dir.pwd}/models/*.rb"].each { |file| require file }
    
    # rest of app code
    

    而且模型不需要任何改变:

    # models/article.rb
    
    require 'paper_trail'
    
    class Article < ActiveRecord::Base
      has_paper_trail
    end
    

    因此,当require 'paper_trail' 调用被执行时,我们已经有了正确的配置设置并且不会显示警告。

    【讨论】:

    • 我创建了一个准系统应用程序github.com/kgrz/37797571 并查看了 Papertrail 的代码。还有很多puts驱动的调试:D
    • 哇,这是一项重要的工作。谢谢!!!至少我知道下次如何解决。
    【解决方案2】:

    我在class Application的定义中将PaperTrail.config.track_associations = false添加到config/application.rb

    【讨论】:

      猜你喜欢
      • 2021-02-08
      • 2018-07-11
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2011-01-04
      • 2013-04-08
      • 2023-03-09
      • 2017-04-06
      相关资源
      最近更新 更多