ActiveSupport :: Concern .. Deprecation Warning中的InstanceMethods模块

时间:2011-12-30 20:05:05

标签: ruby sinatra deprecated activesupport

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

  

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

我不知道如何解决这个问题,当我运行应用程序时它不再起作用了..转到我的路线只返回Sinatra 404页面。 (另外,Rails不是ActiveSupport的一部分吗?为什么会出现在我的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'

模型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

  

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

2 个答案:

答案 0 :(得分:41)

你正在做的应用程序(或其依赖项)中的某个地方

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 mapper使用它,粗略地看一下它在一堆地方使用了弃用的InstanceMethods成语

答案 1 :(得分:3)

看起来本月早些时候在mongo_mapper gem中打了补丁,所以我希望修复程序能够进入下一个版本:

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