Sudden ArgumentError: неверная последовательность байтов в UTF-8 при заполнении

Во время работы над своим приложением Rails я экспериментировал с каким-то способом обрезки изображений, я перешел от Rails Casts # 182, вернуться к тому, что у меня было раньше, а затем к этому сообщение в блоге, после завершения всех настроек я решил перезапустить свою базу данных и заполнить ее, однако я получил ArgumentError: invalid byte sequence in UTF-8, когда попытался заполнить базу данных.

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

Также не помогает то, что я еще не научился читать и отслеживать ошибки rails/rake, вот что я получаю:

rails aborted!
ArgumentError: invalid byte sequence in UTF-8
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-5.0.1/lib/active_support/core_ext/object/blank.rb:118:in `==='
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-5.0.1/lib/active_support/core_ext/object/blank.rb:118:in `blank?'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/sanitized_file.rb:131:in `is_path?'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/sanitized_file.rb:97:in `size'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/sanitized_file.rb:140:in `empty?'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/uploader/cache.rb:120:in `cache!'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/mounter.rb:44:in `block in cache'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/mounter.rb:42:in `each'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/mounter.rb:42:in `map'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/mounter.rb:42:in `cache'
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/mount.rb:300:in `main_image='
/usr/local/rvm/gems/ruby-2.3.0/gems/carrierwave-1.1.0/lib/carrierwave/orm/activerecord.rb:70:in `main_image='
/usr/local/rvm/gems/ruby-2.3.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:46:in `public_send'
/usr/local/rvm/gems/ruby-2.3.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:46:in `_assign_attribute'
/usr/local/rvm/gems/ruby-2.3.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:40:in `block in _assign_attributes'
/usr/local/rvm/gems/ruby-2.3.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:39:in `each'
/usr/local/rvm/gems/ruby-2.3.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:39:in `_assign_attributes'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/attribute_assignment.rb:26:in `_assign_attributes'
/usr/local/rvm/gems/ruby-2.3.0/gems/activemodel-5.0.1/lib/active_model/attribute_assignment.rb:33:in `assign_attributes'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/core.rb:319:in `initialize'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/inheritance.rb:65:in `new'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/inheritance.rb:65:in `new'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/persistence.rb:50:in `create!'
/home/ubuntu/workspace/db/seeds.rb:60:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `block in load'
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:259:in `load_dependency'
/usr/local/rvm/gems/ruby-2.3.0/gems/activesupport-5.0.1/lib/active_support/dependencies.rb:287:in `load'
/usr/local/rvm/gems/ruby-2.3.0/gems/railties-5.0.1/lib/rails/engine.rb:549:in `load_seed'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/tasks/database_tasks.rb:268:in `load_seed'
/usr/local/rvm/gems/ruby-2.3.0/gems/activerecord-5.0.1/lib/active_record/railties/databases.rake:196:in `block (2 levels) in <top (required)>'
/usr/local/rvm/gems/ruby-2.3.0/gems/railties-5.0.1/lib/rails/commands/rake_proxy.rb:14:in `block in run_rake_task'
/usr/local/rvm/gems/ruby-2.3.0/gems/railties-5.0.1/lib/rails/commands/rake_proxy.rb:11:in `run_rake_task'
/usr/local/rvm/gems/ruby-2.3.0/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/usr/local/rvm/gems/ruby-2.3.0/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
/home/ubuntu/workspace/bin/rails:9:in `require'
/home/ubuntu/workspace/bin/rails:9:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/client/rails.rb:28:in `load'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/client/rails.rb:28:in `call'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/client/command.rb:7:in `call'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/client.rb:30:in `run'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/bin/spring:49:in `<top (required)>'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `load'
/usr/local/rvm/gems/ruby-2.3.0/gems/spring-1.7.2/lib/spring/binstub.rb:11:in `<top (required)>'
/home/ubuntu/workspace/bin/spring:15:in `require'
/home/ubuntu/workspace/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

Мой главный вопрос: где именно может происходить эта ошибка? до сих пор я узнал на своем опыте, что это может быть либо seeds.rb, либо модель (в данном случае event.rb), однако я не вижу ничего другого, и у меня они оба работали раньше, я даже мог загружать изображения и раздавать их никаких проблем, пока я не внедрил и не удалил код из Rails Cast и не внедрил код в сообщение в блоге, любое направление в решении будет очень полезным.

Вот сид от модели, до этого работал нормально.

Event.create!(
    name: "  1", 
    spanish_description: "El mejor programa para este sábado con los peques ! #kids #gratis #petfriendly. En Kuchitril. De 6 a 10 pm. #localmarket #tendencias #buenavibra. #corranlavoz!",
    english_description: "El mejor programa para este sábado con los peques ! #kids #gratis #petfriendly. En Kuchitril. De 6 a 10 pm. #localmarket #tendencias #buenavibra. #corranlavoz!",
    place_name: "mamita's",
    place_type: "beach club",
    address: "Calle 28 Norte Mza 10, Lote 8, Centro", 
    county: 'meh',
    city: "Playa del Carmen",
    state: "Quintana Roo",
    postal_code: 77710,

    user_id: 1,
    main_image: File.open(File.join(Rails.root, 'test.jpg')),
    sub_images: [File.open(File.join(Rails.root, 'chinchi.jpg'))],


    eventdates_attributes:[{ 
      start_date: Time.now.in_time_zone("Eastern Time (US & Canada)"),
      finish_date: Time.now.in_time_zone("Eastern Time (US & Canada)"),
      start_hour: "08:00am",
      finish_hour: "11:00am",
    }],

    tickets_attributes:[{ 
      ticket_type: "Solo una vez",
      price: 100,
      currency: "mxn",
      quantity: 150,
      description: "Un boleto muy divertido!"
    }, { 
      ticket_type: "Otra vez",
      price: 150,
      currency: "mxn",
      quantity: 150,
      description: "Un boleto muy divertido!"
    }]
)

ВАЖНАЯ РЕДАКТИРОВКА: Поэтому я решил просто вернуться к предыдущим коммитам, просто чтобы больше не заниматься этой проблемой, и по какой-то причине ошибка продолжает появляться, что заставляет меня поверить, что есть проблема с платформой. Я использую Cloud9, я также читал, что это не проблема, которая должна происходить в Rails 5.0.


person Bluespheal    schedule 05.07.2017    source источник
comment
Какую версию Руби вы используете? Вы убедились, что ваш редактор сохраняет файлы в кодировке UTF-8? Как выглядит файл сидов для этой модели?   -  person spickermann    schedule 05.07.2017
comment
добавил семя к вопросу, я использую ruby ​​​​2.3.0, как мне убедиться, что мой редактор сохраняет в UTF-8? Я всегда принимал это как должное до сих пор.   -  person Bluespheal    schedule 05.07.2017


Ответы (3)


Я нашел причину проблемы, я использовал mount_uploaders для одиночной загрузки, сделав загрузку массивом и, таким образом, создав ошибку. изменение его на mount_uploader было решением, вы действительно должны обратить внимание на эти детали, что ж, урок усвоен. Я бы посоветовал закрыть этот вопрос, если он не полезен для новичков.

person Bluespheal    schedule 05.07.2017

Не уверен, это просто недопустимая последовательность байтов в URL-адресе вашего запроса, попробуйте следующее:

добавьте в свой gemfile gem 'rack-utf8_sanitizer' или gem 'handle_invalid_percent_encoding_requests' или gem 'utf8-cleaner' после этого запуска bundle install.

person Mayur Shah    schedule 05.07.2017
comment
почему-то ни один из них не работал, все равно получаю ту же ошибку. это действительно странно. - person Bluespheal; 05.07.2017
comment
Добавьте следующую строку в ваш config/application.rb: config.middleware.use 'Utf8Sanitizer' - person Mayur Shah; 05.07.2017
comment
Я получаю NameError: undefined local variable or method 'config' for main:Object даже после установки драгоценного камня - person Bluespheal; 05.07.2017
comment
Добавьте utf8_sanitizer.rb в свой проект Rails 3.2 в приложении/промежуточном программном обеспечении, перейдите по этой ссылке gist.github.com/ джост/ca4eda8f31655cf6095a - person Mayur Shah; 05.07.2017
comment
Я вернулся к предыдущим коммитам, и теперь я тоже получаю сообщение об ошибке, и, по-видимому, рельсы всегда должны обрабатывать это автоматически, если только я не использую версию до 2.0, прямо сейчас я использую 5.0, есть идеи, почему это так. происходит? - person Bluespheal; 05.07.2017

mount_uploaders ожидает массив, поэтому ваш файл seed.rb должен быть настроен на прием массива.

Это должно выглядеть так: Model.create(images: [image1.jpg])

Не так: Model.create(images: image1.jpg)

person calyxofheld    schedule 24.03.2019