Ошибка больших двоичных объектов с Active Storage Rails 5.2

Я только что обновил 5.1.4. app до версии 5.2, и я пытаюсь заменить Paperclip на ActiveStorage. В момент, когда пытаюсь обновить существующую запись изображением, я получаю следующую ошибку:

Не удалось автозагрузить константу ActiveStorage :: Blob :: Analyzable, ожидалось /Users/Simon/.rvm/gems/ruby-2.4.0/gems/activestorage-5.2.0/app/models/active_storage/blob/analyzable.rb для определения Это

В моей модели:

has_one_attached :pic

В моем контроллере:

...

  def update
    respond_to do |format|
      if @gin.update(gin_params)
        format.html { redirect_to @gin, notice: 'Gin was successfully updated.' }
        format.json { render :show, status: :ok, location: @gin }
      else
        format.html { render :edit }
        format.json { render json: @gin.errors, status: :unprocessable_entity }
      end
    end
  end

...

 def gin_params   params.require(:gin).permit(:name, :text, :snippet,
 :pic, :slug, :abv, distillery_attributes: [:id, :name], botanical_ids:
 []) end

В storage.yml:

   amazon:
    service: S3
    access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
    secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
    region: xx-xxxx-x
    bucket: xxxxxxx

Ключи доступа выставляю через rails credentials:edit

В development.rb:

 config.active_storage.service = :amazon

На мой взгляд:

<%= image_tag @gin.pic, class: "border shadow-lg" %>

Я читал хотя http://edgeapi.rubyonrails.org/classes/ActiveStorage/Blob/Analyzable.html, но для меня это не имеет особого смысла.

Ошибка заставила меня искать файл по адресу app/models/active_storage/blob/analyzable.rb, но я не вижу его в своем приложении?

Что я пропустил?


person Simon Cooper    schedule 12.05.2018    source источник
comment
У вас есть gem "aws-sdk-s3", require: false в вашем Gemfile? А вы сделали rails active_storage:install, rake db:migrate?   -  person Artem Dorodovskyi    schedule 13.05.2018


Ответы (4)


У меня точно такая же ошибка. Для меня это было потому, что учетные данные для AWS S3 отсутствовали (они отсутствовали в credentials.yml.enc)

person nuaky    schedule 04.07.2018

Решено

Хотя у меня уже было gem 'aws-sdk-s3', '~>1', у меня не было require: false

person Simon Cooper    schedule 13.05.2018

У меня было это исключение, но причина моих проблем заключалась в том, что активному хранилищу молча не удавалось загрузить свои конфигурации из storage.yml:

Загрузка файла в консоль rails показывает исключение (тогда как rails проглатывает исключение при загрузке конфигурации активного хранилища):

YAML.load(ERB.new(File.read("#{Rails.root}/config/storage.yml")).result)
NoMethodError: undefined method `[]' for nil:NilClass

У меня был недействительный комментарий с интерполяцией ERB. Устранение этой проблемы устранило мою проблему.

person eprothro    schedule 19.12.2018

Запустите rails active_storage:install и rails db:migrate

Добавьте этот драгоценный камень gem 'aws-sdk-s3', '~>1' и bundle

Удалите свои credential.yml.enc и master.key, если они существуют

Запустите EDITOR=vim rails credentials:edit и введите свои учетные данные

И нормально rails s должно работать

person Clement C    schedule 17.01.2019