Модуль InstanceMethods внутри ActiveSupport:: Концерн.. Предупреждение об устаревании
У меня есть портфолио, построенное в Синатре. Я не работал над этим некоторое время, делал некоторые Rails. Вчера я обновил свой список драгоценных камней, запустив "gem update". Я не знаю, имеет ли это какое-либо отношение к этому, но сегодня я снова начал работать на веб-сайте портфолио, и я получаю предупреждения об устаревании.
ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: модуль InstanceMethods внутри ActiveSupport:: Концерн больше не будет включаться автоматически. Пожалуйста, определите методы экземпляра непосредственно в Работе. (из включить в /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'
EDIT: Просто увидел, что я тоже получаю его за models/post.rb
ПРЕДУПРЕЖДЕНИЕ О ДЕПРЕКАЦИИ: модуль InstanceMethods внутри ActiveSupport:: Концерн больше не будет включаться автоматически. Пожалуйста, определите методы экземпляра непосредственно в Post вместо этого. (из включить в /Users/joris/Desktop/sinatra/portfolio/models/post.rb:2)
Ответы
Ответ 1
Где-то в вашем приложении (или его зависимостях) вы делаете
module Blah
extend ActiveSupport::Concern
module InstanceMethods
def foo
end
end
...
end
и активная поддержка сообщают вам сделать
module Blah
extend ActiveSupport::Concern
def foo
end
end
Вы правы, что Active Support является частью Rails, но, как и Active Record, она также может использоваться без остальной части рельсов. Mongo mapper использует его, например, и на беглом взгляде использует устаревшую InstanceMethods
идиому в кучке мест
Ответ 2
Похоже, что это было исправлено в начале месяца в монете mongo_mapper, поэтому я ожидал, что исправление превратится в следующую версию:
https://github.com/jnunemaker/mongomapper/commit/d2333d944ce6ae59ecab3c45e25bbed261f8180e