ActiveStorage :: Blob的未知属性“ service_name”

时间:2019-10-14 08:51:19

标签: ruby-on-rails-6

只想为那些正面临同样问题的人提供帮助。从导轨5升级到6后,activestorage可能会引发错误:ActiveStorage :: Blob的未知属性'service_name'。 解决方案:添加列

t.string :service_name, null: false

到桌子

:active_storage_blobs

4 个答案:

答案 0 :(得分:12)

这些命令对我有用。

rails active_storage:update
rails db:migrate

答案 1 :(得分:7)

这在正常的升级过程中会处理:

rails app:update
rails db:migrate

service_name 更改的此解决方案在 6.1 Release Notes 中得到提及。自 Rails 6.0.0 (source) 起,rails app:update 任务为您调用内部 rails active_storage:update

答案 2 :(得分:5)

没有错误的宝石文件:

gem 'rails', '~> 6.0.2'

错误的宝石文件:

gem 'rails', github: 'rails/rails', branch: 'master'

如果您已经在使用active_storage,并且想将rails版本更新为6.1.0alpha,则必须运行

rails active_storage:update

这将为您提供2个新的active_storage迁移,它们是active_storage正常运行所必需的。

迁移1:

# This migration comes from active_storage (originally 20190112182829)
class AddServiceNameToActiveStorageBlobs < ActiveRecord::Migration[6.0]
  def up
    unless column_exists?(:active_storage_blobs, :service_name)
      add_column :active_storage_blobs, :service_name, :string

      if configured_service = ActiveStorage::Blob.service.name
        ActiveStorage::Blob.unscoped.update_all(service_name: configured_service)
      end

      change_column :active_storage_blobs, :service_name, :string, null: false
    end
  end
end

迁移2:

# This migration comes from active_storage (originally 20191206030411)
class CreateActiveStorageVariantRecords < ActiveRecord::Migration[6.0]
  def up
    create_table :active_storage_variant_records do |t|
      t.belongs_to :blob, null: false, index: false
      t.string :variation_digest, null: false

      t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true
      t.foreign_key :active_storage_blobs, column: :blob_id
    end
  end
end

比你刚跑

rails db:migrate

有效。

答案 3 :(得分:0)

第1步:

 rm 20191021084642_create_active_storage_tables.active_storage.rb

第2步:

 rails active_storage:install

第3步:

 rails db:migrate