【问题标题】:The InstanceMethods module inside ActiveSupport::Concern.. Deprecation WarningActiveSupport::Concern 中的 InstanceMethods 模块.. 弃用警告
【发布时间】:2012-01-30 19:07:21
【问题描述】:

我有一个在 Sinatra 中构建的投资组合网站。我已经有一段时间没有工作了,一直在做一些 Rails。我昨天通过运行“gem update”更新了我的 gem 列表。我不知道这是否与此有关,但我今天再次开始在投资组合网站上工作,并且收到了一些弃用警告。

弃用警告:内部的 InstanceMethods 模块 ActiveSupport::Concern 将不再自动包含在内。 请直接在 Work 中定义实例方法。 (从 包括在 /Users/joris/Desktop/sinatra/portfolio/models/work.rb:2)

我不知道如何解决这个问题,当我运行应用程序时它不再工作了。去我的路线只会返回 Sinatra 404 页面。 (另外,ActiveSupport 不是 Rails 的一部分吗?为什么这会出现在我的 Sinatra 应用程序中……)

它在错误中提到的文件是 work.rb:

class Work
  include MongoMapper::Document
     key :title, String
     key :url, String
     key :filename, String
     key :file, String
     key :description, String

    timestamps!
end

这是我的主文件(portfolio.rb):

require "sinatra"
require 'twitter'
require 'RedCloth'
require 'html_truncator'
require 'digest/md5'

class Portfolio < Sinatra::Application

  require_relative 'config/init'
  require_relative 'helpers/init'
  require_relative 'models/init'
  require_relative 'routes/init'

模型初始化文件(调用 work.rb 文件)具有以下内容:

require 'mongo_mapper'

MongoMapper.connection = Mongo::Connection.new('lalaland.com', 10070)
MongoMapper.database = 'hello'
MongoMapper.database.authenticate('lalala', 'hello')

require_relative 'post'
require_relative 'work'

编辑:刚刚看到我也收到了 models/post.rb

弃用警告:内部的 InstanceMethods 模块 ActiveSupport::Concern 将不再自动包含在内。 请直接在 Post 中定义实例方法。 (从 包括在 /Users/joris/Desktop/sinatra/portfolio/models/post.rb:2)

【问题讨论】:

    标签: ruby sinatra deprecated activesupport


    【解决方案1】:

    这似乎是本月早些时候在 mongo_mapper gem 中修复的,所以我希望这个修复会在下一个版本中出现:

    https://github.com/jnunemaker/mongomapper/commit/d2333d944ce6ae59ecab3c45e25bbed261f8180e

    【讨论】:

    • 附录:确实如此......如果你更新你的 mongo_mapper gem,你就不会再看到这个了。
    【解决方案2】:

    您正在执行的应用程序(或其依赖项)中的某个位置

    module Blah
      extend ActiveSupport::Concern
      module InstanceMethods
        def foo
        end
      end
      ...
    end
    

    Active Support 告诉您这样做

    module Blah
      extend ActiveSupport::Concern
      def foo
      end
    end
    

    你说得对,Active Support 是 Rails 的一部分,但就像 Active Record 一样,它也可以在没有其他 Rails 的情况下使用。例如,Mongo 映射器使用它,粗略一看,它在一堆地方使用了已弃用的 InstanceMethods 成语

    【讨论】:

    • 我不会在任何地方这样做。然而,它在(我的模型)上出错的代码包括 MongoMapper::Document。它可能是 MongoMapper 中的一个“错误”吗?感谢您的回复:)
    • Mongo 映射器似乎确实在使用新弃用的表单。
    • 我删除了对 mongo_mapper 的所有引用,现在我的页面加载了。我想我将不得不等待更新或寻找替代方案。谢谢:)
    • 如果我是你,我会尝试将活动支持版本固定到 3.1.3
    • 这对我来说打破了所有相关的测试。耻辱。我无法将代码移动到类本身,因为这就是我在模块中定义它的原因。所以现在我必须将 InstanceMethods 重命名为 MyInstanceMethods 并手动执行def self.included(base) base.send :include, MyInstanceMethods end?真的吗?有没有更好的解决方案?
    猜你喜欢
    • 2012-06-01
    • 1970-01-01
    • 2012-02-01
    • 2020-03-24
    • 2011-09-05
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2012-09-14
    相关资源
    最近更新 更多