Masalah pengkodean saat mengimpor data Salesforce ke Rails dengan Bulk Api

Saya mencoba melakukan impor data secara teratur ke Rails menggunakan permata rufus-scheduler dan permata salesforcebulk.

Saya telah berhasil mengimpor data dari satu objek khusus tenaga penjualan ke database saya, tetapi ketika saya mencoba mengimpor objek lain, saya mengalami masalah:

scheduler caught exception:
Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8: INSERT INTO "channels" ("created_at", "name", "updated_at") VALUES (?, ?, ?)
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:208:in `encode'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:208:in `type_cast'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:259:in `block (2 levels) in exec_query'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:258:in `map'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:258:in `block in exec_query'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/sqlite_adapter.rb:242:in `exec_query'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:63:in `exec_insert'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:90:in `insert'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `insert'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/relation.rb:66:in `insert'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/persistence.rb:367:in `create'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/timestamp.rb:58:in `create'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/callbacks.rb:268:in `block in create'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:403:in `_run__3666243914465906250__create__2439689705720496844__callbacks'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `__run_callback'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:81:in `run_callbacks'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/callbacks.rb:268:in `create'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/persistence.rb:348:in `create_or_update'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/callbacks.rb:264:in `block in create_or_update'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:414:in `_run__3666243914465906250__save__2439689705720496844__callbacks'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `__run_callback'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:81:in `run_callbacks'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/callbacks.rb:264:in `create_or_update'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/persistence.rb:84:in `save'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/validations.rb:50:in `save'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/attribute_methods/dirty.rb:22:in `save'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:259:in `block (2 levels) in save'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:313:in `block in with_transaction_returning_status'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:208:in `transaction'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:311:in `with_transaction_returning_status'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:259:in `block in save'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:270:in `rollback_active_record_state!'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/transactions.rb:258:in `save'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/relation/finder_methods.rb:296:in `find_or_instantiator_by_attributes'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/activerecord-3.2.13/lib/active_record/dynamic_matchers.rb:52:in `method_missing'
/Users/arturodiaz/Drive/Code/partnerportal2/agripa/config/initializers/task_scheduler.rb:121:in `block (2 levels) in <top (required)>'
/Users/arturodiaz/Drive/Code/partnerportal2/agripa/config/initializers/task_scheduler.rb:120:in `each'
/Users/arturodiaz/Drive/Code/partnerportal2/agripa/config/initializers/task_scheduler.rb:120:in `block in <top (required)>'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/rufus-scheduler-2.0.19/lib/rufus/sc/jobs.rb:231:in `call'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/rufus-scheduler-2.0.19/lib/rufus/sc/jobs.rb:231:in `trigger_block'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/rufus-scheduler-2.0.19/lib/rufus/sc/jobs.rb:191:in `block in trigger'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/rufus-scheduler-2.0.19/lib/rufus/sc/scheduler.rb:415:in `call'
/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/rufus-scheduler-2.0.19/lib/rufus/sc/scheduler.rb:415:in `block in trigger_job'
================================================================================

Berikut kode objek yang berhasil diambil dan diimpor:

scheduler.at("2013-07-03 11:17:15 -0700 ") do

  client = SalesforceBulk::Client.new(username: 'XXXXXXXXX', password: 'XXXXXXXXX')
  client.authenticate

  job = client.add_job(:query, :Paquete__c)

  batch = client.add_batch(job.id, "SELECT Id, Name, Capacidad__c, Organizacion__c FROM Paquete__c")

  job = client.close_job(job.id)

  sleep 5.0

  batch = client.batch_info(job.id, batch.id)

  results = client.batch_result(job.id, batch.id)

  results.each do |d|
    Paquete.find_or_create_by_serie_and_id_and_version(id: d[:Id],
                                                            serie: d[:Name],
                                                            account_id: d[:Organizacion__c],
                                                            capacidad: d[:Capacidad__c])
  end

  puts "Done... Paquetes"

end

Ini kode yang tidak berfungsi:

scheduler.at("2013-07-03 11:40:00 -0700 ") do

client = SalesforceBulk::Client.new(username: 'XXXXXXXXXXXX', password: 'XXXXXXXXXXX')
client.authenticate

job = client.add_job(:query, :Account)

batch = client.add_batch(job.id, "SELECT Id, Name, Type FROM Account")
job = client.close_job(job.id)

sleep 5.0

batch = client.batch_info(job.id, batch.id)

results = client.batch_result(job.id, batch.id)

results.each do |d|
Account.find_or_create_by_id_and_name(id: d[:Id], name: d[:Name],type: d[:Type])                                                                

end

puts "Done... Accounts"

end

Saya sudah mencoba mengubah pengkodean di parser CSV di dalam metode batch_result permata salesforcebulk tanpa hasil.

Saya merasa sangat aneh bahwa satu bagian kode berfungsi dan yang lainnya tidak. Mungkin itu adalah sesuatu mengenai tabel tertentu.


person arturodz    schedule 03.07.2013    source sumber


Jawaban (1)


Anda harus fokus pada kesalahan:

Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8:
INSERT INTO "channels" ("created_at", "name", "updated_at") VALUES (?, ?, ?)

/Users/arturodiaz/.rvm/gems/ruby-2.0.0-p195@agripa/gems/
activerecord-3.2.13/lib/active_record/connection_adapters/
sqlite_adapter.rb:208:in `encode'

Tampaknya ada ~n (seperti di JalapeƱo) di kolom nama Anda dan adaptor sqlite tidak menyukainya. Mungkin permata massal Salesforce Anda memerlukan semacam pengaturan pelokalan.

Ini tidak ada hubungannya dengan penjadwal rufus.

person jmettraux    schedule 13.08.2013