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)
Любые советы, помощь очень ценится.