web-dev-qa-db-ja.com

アクティブストレージでのBLOBエラーRails 5.2

5.1.4をアップグレードしました。アプリを5.2に変更し、ペーパークリップを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でファイルを検索しましたが、アプリに表示されませんか?

私は何を逃しましたか?

5
Simon Cooper

解決済み

私はすでにgem 'aws-sdk-s3', '~>1'を持っていましたが、require: falseは持っていませんでした

1
Simon Cooper

まったく同じエラーが発生します。私にとっては、AWS S3の認証情報が欠落していたためです(credentials.yml.encから欠落していました)

2
nuaky

この例外がありましたが、問題の原因は、アクティブストレージがstorage.ymlからの構成のロードにサイレントに失敗していたことでした。

Railsコンソールにファイルをロードすると例外が表示されます(一方、Railsはアクティブなストレージ構成をロードするときに例外を飲み込みます):

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

無効なERB補間のコメントがありました。これを修正すると、私の問題が修正されました。

1
eprothro

Rails active_storage:installRails db:migrateを起動します

このgemをgem 'aws-sdk-s3', '~>1'bundleに追加します

credential.yml.encmaster.keyが存在する場合は削除します

EDITOR=vim Rails credentials:editを起動し、資格情報を入力します

そして通常はRails sそれは機能するはずです

0
Clement C