Rails Active Storage 本地附件因神秘错误而失败:未初始化常量可分析

And*_*rew 6 ruby-on-rails rails-activestorage ruby-on-rails-6

红宝石'2.7.1'/rails 6.0.3.2

我无法让本地活动存储附件工作。这是我的设置:

我跑了:

$ rails active_storage:install
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

模型架构

  create_table "amazon_uploads" do |t|
    t.string "status"
    t.string "order_csv"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

Run Code Online (Sandbox Code Playgroud)

模型:

class AmazonUpload < ApplicationRecord
  has_many :amazon_upload_recipients

  has_one_attached :order_csv
end

Run Code Online (Sandbox Code Playgroud)

我的存储.yml

test:
  service: Disk
  root: <%= Rails.root.join("tmp/storage") %>

local:
  service: Disk
  root: <%= Rails.root.join("storage") %>
Run Code Online (Sandbox Code Playgroud)

我的development.rb包含:

  config.active_storage.service = :local
Run Code Online (Sandbox Code Playgroud)

然后在我的代码中我这样做:

$ rails active_storage:install
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)

最后一行失败

NameError: uninitialized constant #<Class:0x0000564c2f7e8638>::Analyzable
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一其他参考这个错误的人声称他们有一个类型,但我不认为这是这里的问题

小智 2

这是 zeitwerk bug,你可以将 Rails 版本升级到 6.1.x,一切都会正常工作

如果您不想升级 - 通过添加 application.rb 切换到经典加载模式

config.autoloader = :classic
Run Code Online (Sandbox Code Playgroud)