2016-11-19 3 views
0

У меня есть основное приложение Rails, и я пытаюсь использовать проблемы для сушки моделей. Все идет хорошо в среде разработки, но когда я пытаюсь загрузить приложение на Heroku, она постоянно дает мне эту ошибку:Концерн не загружается в Rails 5

/app/app/models/address.rb:3:in `<class:Address>': uninitialized constant Address::Persistable (NameError) 

Я попытался отключить жадную загрузку, но это не помогло.

Вот мой адрес Модель:

class Address < ApplicationRecord 

    include Persistable 

    belongs_to :city 
    belongs_to :company 

    validates :city_id, :human, :lat, :lng, presence: true 
end 

А вот модуль, который я назвал "persistable", расположенный в app/models/concerns/persistable.rb

module Persistable 
    extend ActiveSupport::Concern 

    included do 
    scope :historical, -> { where(is_historical: true) } 
    scope :deleted, -> { where(is_deleted: true) } 
    default_scope { where(is_historical: false, is_deleted: false) } 

    def delete 
     update_attribute(:is_deleted, true) 
    end 

    def archive 
     update_attribute(:is_historical, true) 
    end 

    def revive 
     update_attribute(:is_historical, false) 
     update_attribute(:is_deleted, false) 
    end 
    end 
end 

То, что я уже сделал:

  • пытался отключить интенсивную загрузку
  • пытался переместить Persistable модуль из каталога concerns
  • попытался включить concerns путь к конфигурации автозагрузки

Ничего не работало, я до сих пор эта проблема!

UPDATE

Я заповедал форма guiderails r 'puts ActiveSupport::Dependencies.autoload_paths' проверить autoload_paths и я получил:

D:/work/rails/www/app/models/concerns 
D:/work/rails/www/app/assets 
D:/work/rails/www/app/channels 
D:/work/rails/www/app/controllers 
D:/work/rails/www/app/helpers 
D:/work/rails/www/app/jobs 
D:/work/rails/www/app/mailers 
D:/work/rails/www/app/models 
D:/work/rails/www/test/mailers/previews 

ответ

1

Ну, проблема была в конфигурации сервера Heroku. Похоже, что Heroku блокирует постоянное имя Persistable. Как только я переименовал каждое событие Persistable в Archivable, он только начал работать.

0

Это должно было дать вам подсказку:

uninitialized constant Address::Persistable (NameError)

Он пытается найти модуль по адресу, по какой-то причине. Будьте ясны и требуйте сохранения на уровне верхнего уровня

class Address < ApplicationRecord 

    include ::Persistable 
+0

Спасибо! Но ошибка все еще появляется в различной форме: '' '/app/app/models/address.rb:3:in' ': uninitialized constant Persistable (NameError) '' '. Где я должен смотреть? – Max

+0

@Max: Кажется, что ваши autoload_paths каким-то образом перепутаны. Я бы посмотрел на это сейчас. –

+0

Хорошо, добавленный в вопрос .. – Max