5

我刚刚升级了 5.1.4。应用程序到 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但在我的应用程序中看不到它?

我错过了什么?

4

5 回答 5

2

我有完全相同的错误。对我来说,这是因为缺少 AWS S3 的凭据(它在credentials.yml.enc中丢失了)

于 2018-07-04T21:16:26.480 回答
1

解决

虽然我已经有但gem 'aws-sdk-s3', '~>1'我没有require: false

于 2018-05-13T08:35:52.747 回答
1

我有这个异常,但我的问题的原因是活动存储无法从 storage.yml 加载其配置:

在 rails 控制台加载文件会显示异常(而 rails 在加载活动存储配置时会吞下异常):

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

我有一条无效的 ERB 插值评论。解决这个问题解决了我的问题。

于 2018-12-19T21:28:37.363 回答
0

发射rails active_storage:installrails db:migrate

添加这个宝石gem 'aws-sdk-s3', '~>1'bundle

删除你的credential.yml.enc和你的master.key如果存在

启动EDITOR=vim rails credentials:edit并放置您的凭据

通常rails s它应该可以工作

于 2019-01-17T10:33:55.963 回答
0

我通过aws-sdk从 2.2 更新到 3 来解决这个问题

于 2021-09-10T19:03:28.430 回答