NameError (неинициализированная константа Paperclip :: Storage :: S3 :: Aws) paperclip 6.1.0 - PullRequest
0 голосов
/ 29 апреля 2020

rails 5.2, ruby 2.6.4

Я обновляю приложение rails с rails 5.1 до 5.2. Мы используем камень paperclip и планируем обновить до activestorage, но не в данный момент. Я видел ответы на эту ошибку, но все они были для более старой версии или рельсов.

Gemfile: (git diff)

-gem 'rails', '~> 5.1'
+gem 'rails', '~> 5.2'

-gem 'aws-sdk', '< 2.0' # Compatability with old versions of paperclip
+gem 'aws-sdk-s3', '>=0'

-gem 'paperclip', '4.3.7' # Rails 3.2 compatability
+gem 'paperclip', '~> 6.1.0' # '~> 4.3.7'

bundle install работало нормально.

У нас есть форма в приложении PHP который подключается к API в нашем приложении. Он отправляет информацию о форме и от 1 до 3 файловых вложений. API создает запись в модели с информацией о форме. Если файл (ы) прикреплены, то для каждого файла создается запись PaperclipAsset. Вот где сейчас приложение бомбит.

NameError (uninitialized constant Paperclip::Storage::S3::Aws)
paperclip_asset.rb
class PaperclipAsset < ApplicationRecord                                        
  belongs_to :attachable, :polymorphic => true                                  

  has_attached_file :data,                                                      
    storage: :s3, 
    s3_region: 'us-east-1',                                                     
    s3_credentials: "#{Rails.root}/config/s3.yml",                              
    s3_permissions: :private                                                    

  validates_attachment_content_type :data, :content_type => %w(                 
    application/pdf                                                             
    application/msword                                                          
    application/vnd.openxmlformats-officedocument.wordprocessingml.document     
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet           
    text/plain                                                                  
  )                                                                             

  def data_url                                                                  
    data.expiring_url(300)                                                      
  end                                                                                
end
api/transfer_credit_forms_controller.rb
... 
# attachments:
[:attachment1, :attachment2, :attachment3].each do |attachment|
  if params[:transfer_credit_form][attachment].present?
    pa = PaperclipAsset.new( attachable: tcf )
    pa.data = File.new(params[:transfer_credit_form][attachment])
    pa.save
  end
end

Я тестирую в своей области разработки. Ошибка появляется в файле журнала tail -f log/development.log

...
Completed 500 Internal Server Error in 55ms (ActiveRecord: 13.6ms)
NameError (uninitialized constant Paperclip::Storage::S3::Aws):

app/controllers/api/transfer_credit_forms_controller.rb:101:in `block in create'
app/controllers/api/transfer_credit_forms_controller.rb:98:in `each'
app/controllers/api/transfer_credit_forms_controller.rb:98:in `create'

Я играл с разными версиями paperclip и aws-sdk / aws-sdk-s3, но я получаю одну и ту же ошибку при каждой настройке.

Теперь, рельсы не позволят мне вернуться к предыдущим версиям, которые были установлены, когда я начал обновление скрепки. Я получаю ошибку зависимости, которая вынуждает меня обновить paperclip

Bundler could not find compatible versions for gem "mimemagic":
  In Gemfile:
    rails (~> 5.2) was resolved to 5.2.4.2, which depends on
      activestorage (= 5.2.4.2) was resolved to 5.2.4.2, which depends on
        marcel (~> 0.3.1) was resolved to 0.3.3, which depends on
          mimemagic (~> 0.3.2)

    paperclip (~> 4.3.7) was resolved to 4.3.7, which depends on
      mimemagic (= 0.3.0)

Любые советы, помощь очень ценится.

...