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
でファイルを検索しましたが、アプリに表示されませんか?
私は何を逃しましたか?
解決済み
私はすでにgem 'aws-sdk-s3', '~>1'
を持っていましたが、require: false
は持っていませんでした
まったく同じエラーが発生します。私にとっては、AWS S3の認証情報が欠落していたためです(credentials.yml.encから欠落していました)
この例外がありましたが、問題の原因は、アクティブストレージがstorage.ymlからの構成のロードにサイレントに失敗していたことでした。
Railsコンソールにファイルをロードすると例外が表示されます(一方、Railsはアクティブなストレージ構成をロードするときに例外を飲み込みます):
YAML.load(ERB.new(File.read("#{Rails.root}/config/storage.yml")).result)
NoMethodError: undefined method `[]' for nil:NilClass
無効なERB補間のコメントがありました。これを修正すると、私の問題が修正されました。
Rails active_storage:install
とRails db:migrate
を起動します
このgemをgem 'aws-sdk-s3', '~>1'
とbundle
に追加します
credential.yml.enc
とmaster.key
が存在する場合は削除します
EDITOR=vim Rails credentials:edit
を起動し、資格情報を入力します
そして通常はRails s
それは機能するはずです