anlek / mongify

Mongify allows you to map your data from a sql database and into a mongodb document database.
http://github.com/anlek/mongify
MIT License
317 stars 82 forks source link

error "instance_eval" on translation #117

Closed roggaioso closed 5 years ago

roggaioso commented 7 years ago

This is my config file:

sql_connection do
  adapter     "mysql2"
  host        "localhost"
  username    "user"
  password    "xxxxxxxxxx"
  database    "test"
  batch_size  10000
end

mongodb_connection do
  host        "localhost"
  database    "test"
end

It's my translation file

table "config" do
    column "id", :key, :as => :integer
    column "CODUF", :integer
    column "UF", :string
    column "ESTADO", :string
    column "UE", :string
    column "supervisao", :string
    column "data_ref", :string
    column "FONE", :string
    column "RAMAL", :string
    column "siape_chefe", :string
    column "nome_chefe", :string
end

table "rev_afc" do
    column "id", :key, :as => :integer
    column "data", :string
    column "posto", :integer
    column "placa", :string
    column "litros", :float
    column "valor_litro", :float
    column "hodometro", :integer
    column "requisitante", :string
    column "siape_autorizador", :integer
    column "status", :integer
end

table "rev_age" do
    column "CODNR", :integer
    column "NR", :string
    column "DATA_REQUI", :string
    column "COD_LOTAC", :integer
    column "CHEFE", :integer
    column "LOCAL", :integer
    column "TEMPO_PREV", :string
    column "DIAS_PREV", :integer
    column "DATA_SAIDA", :string
    column "HORA_SAIDA", :string
    column "DESTINO", :string
    column "SERVICO", :string
    column "TRANSPORTE", :integer
    column "OBSERVACAO", :string
    column "SIAPE_MOTO", :string
    column "USUARIO", :string
    column "PLACA", :string
    column "KM_INICIAL", :integer
    column "KM_FINAL", :integer
    column "DATA_CHEGADA", :string
    column "H_DISPENSA", :string
    column "H_CHEGADA", :string
    column "status", :integer
    column "OBS_ATENDIMENTO", :string
end

table "rev_dataref" do
    column "Id", :key, :as => :integer
    column "id_superv", :integer
    column "data_referencia", :string
end

table "rev_local" do
    column "id_local", :integer
    column "descricao", :string
    column "id_superv", :integer
end

table "rev_motorist" do
    column "Id", :key, :as => :integer
    column "SIAPE", :string
    column "NOME_MOTOR", :string
    column "RG", :string
    column "ORGAO", :string
    column "UF", :string
    column "id_superv", :integer
    column "N_HABILITA", :string
    column "CATEGORIA", :string
    column "UF_HABILITACAO", :string
    column "N_REGISTRO", :string
    column "D_HABILITA", :string
    column "D_EXPEDICA", :string
    column "D_VALIDADE", :string
    column "AUTORIZA", :integer
    column "D_AUTORIZA", :string
    column "ATIVO", :integer
end

table "rev_posto" do
    column "id", :key, :as => :integer
    column "rezao_social", :string
    column "endereco", :string
    column "fone", :string
    column "cnpj", :string
    column "ativo", :integer
end

table "rev_rev" do
    column "CODNR", :integer
    column "DATA_REQUI", :string
    column "COD_LOTAC", :integer
    column "CHEFE", :integer
    column "LOCAL", :integer
    column "TEMPO_PREV", :string
    column "DIAS_PREV", :integer
    column "DATA_SAIDA", :string
    column "HORA_SAIDA", :string
    column "DESTINO", :string
    column "SERVICO", :string
    column "TRANSPORTE", :integer
    column "OBSERVACAO", :binary
    column "SIAPE_MOTO", :string
    column "USUARIO", :string
    column "PLACA", :string
    column "KM_INICIAL", :integer
    column "KM_FINAL", :integer
    column "SIAPERESP", :integer
    column "DATA_CHEGADA", :string
    column "H_DISPENSA", :string
    column "H_CHEGADA", :string
    column "DATA_ATEND", :string
    column "status", :integer
    column "OBS_ATENDIMENTO", :string
end

table "rev_senhas" do
    column "Id", :key, :as => :integer
    column "siape", :string
    column "nome", :string
    column "id_superv", :integer
    column "login", :string
    column "senha", :string
    column "level", :integer
    column "autoriza_comb", :integer
    column "email", :string
    column "ativo", :integer
end

table "rev_superv1" do
    column "id_superv", :integer
    column "sigla", :string
    column "unidade", :string
    column "nome", :string
    column "endereco", :string
    column "Bairro", :string
    column "municipio", :string
    column "local", :integer
    column "uf", :string
    column "cep", :string
    column "telefone", :string
    column "login", :string
    column "senha", :string
    column "OBS", :text
    column "level", :integer
    column "email", :string
    column "data_ref", :string
    column "ativo", :integer
end

table "rev_superv2" do
    column "id", :key, :as => :integer
    column "id_superv", :integer
    column "siape", :integer
    column "nome", :string
    column "cargo", :string
    column "ativo", :integer
end

table "rev_veiculo" do
    column "id", :key, :as => :integer
    column "PLACA", :string
    column "TIPO", :string
    column "UF1", :string
    column "LOCALIZ1", :string
    column "id_superv", :integer
    column "UF2", :string
    column "MARCA", :string
    column "MODELO", :integer
    column "patrimonio", :string
    column "TIPOCOOMB", :string
    column "COR", :string
    column "CHASSI", :string
    column "RENAVAM", :string
    column "HODOMETRO", :integer
    column "OBS", :text
    column "Ativo", :integer
    column "Disp", :integer
    column "data", :string
end

When a run mongify process database.config translation.rb , I get this error:

C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.0/lib/mongify/translation.rb:62:in `instance_eval': undefined local v
ariable or method `"\xFF\xFEt"' for #<Mongify::Translation:0x00000003661928 @all_tables=[]> (NameError)
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.0/lib/mongify/translation.rb:62:in `instance_eval'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.0/lib/mongify/translation.rb:62:in `parse'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.0/lib/mongify/cli/command/worker.rb:55:in `execute'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.0/lib/mongify/cli/application.rb:28:in `execute!'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.0/bin/mongify:15:in `<top (required)>'
        from C:/Ruby23-x64/bin/mongify:23:in `load'
        from C:/Ruby23-x64/bin/mongify:23:in `<main>'

By error message, I thought it was something in the conversion of data types. So I tried to change the types of data (date to string), delete the columns of type text, also tried to eliminate most of the tables, leaving only one. Nothing worked, always the same mistake.

What is my mistake?

anlek commented 7 years ago

I'm not sure, I haven't tested Mongify on Windows. Can you tell me what you have installed on your system (by using gem list)?

roggaioso commented 7 years ago

Sorry about the delay. This is my gem list.

activemodel (5.0.0.1, 3.2.22.5) activerecord (5.0.0.1, 3.2.22.5) activesupport (5.0.0.1, 3.2.22.5) arel (7.1.4, 3.0.3) bigdecimal (1.2.8) bson (1.10.2) bson_ext (1.10.2) builder (3.0.4) concurrent-ruby (1.0.2) did_you_mean (1.0.0) highline (1.7.8) i18n (0.7.0) io-console (0.4.5) json (1.8.3) minitest (5.8.3) mongify (1.3.0) mongo (1.10.2) multi_json (1.12.1) mysql2 (0.4.5 x64-mingw32) net-telnet (0.1.1) power_assert (0.2.6) psych (2.0.17) rake (10.4.2) rdoc (4.2.1) test-unit (3.1.5) thread_safe (0.3.5) tzinfo (1.2.2, 0.3.52)

anlek commented 7 years ago

I think it might be an issue with Rails 5.0.0.1 being installed, try removing it and re-running the mongify command.

anlek commented 7 years ago

I just updated Mongify removing ActiveRecord 5.0 usage. Please try updated (gem install mongify) and let me know if you still have this issue.

roggaioso commented 7 years ago

I did as you suggested: I removed the activerecord and called the installation again (gem install mongify).

This is my gem list (activerecord => 4.2.7.1):

activemodel (5.0.0.1, 4.2.7.1, 3.2.22.5)
activerecord (4.2.7.1, 3.2.22.5)
activesupport (5.0.0.1, 4.2.7.1, 3.2.22.5)
arel (7.1.4, 6.0.3, 3.0.3)
bigdecimal (1.2.8)
bson (1.12.5, 1.10.2)
bson_ext (1.12.5, 1.10.2)
builder (3.2.2, 3.0.4)
concurrent-ruby (1.0.2)
did_you_mean (1.0.0)
highline (1.7.8)
i18n (0.7.0)
io-console (0.4.5)
json (1.8.3)
minitest (5.8.3)
mongify (1.3.1, 1.3.0)
mongo (1.12.5, 1.10.2)
multi_json (1.12.1)
mysql2 (0.4.5 x64-mingw32)
net-telnet (0.1.1)
power_assert (0.2.6)
psych (2.0.17)
rake (10.4.2)
rdoc (4.2.1)
test-unit (3.1.5)
thread_safe (0.3.5)
tzinfo (1.2.2, 0.3.52)

When I ran to process, it generates the following error:

C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in `instance_eval': undefined local v
ariable or method `"\xFF\xFEt"' for #<Mongify::Translation:0x00000003f3cdb8 @all_tables=[]> (NameError)
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in `instance_eval'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in `parse'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/cli/command/worker.rb:59:in `execute'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/cli/application.rb:28:in `execute!'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/bin/mongify:15:in `<top (required)>'
        from C:/Ruby23-x64/bin/mongify:23:in `load'
        from C:/Ruby23-x64/bin/mongify:23:in `<main>'
anlek commented 7 years ago

This might have something to do with you having an invisible character in your translation file. Try copying the whole translation.rb into a plain text editor and back into your normal editor. Just to make sure it's not that. Also try to gem remove mongify and select version 1.3.0

roggaioso commented 7 years ago

First I removed version 1.3.1 (gem uninstall mongify --version 1.3.1), but then I followed its orientation and removed all mongify and reinstalled only version 1.3.0.

I use Notepad ++ as an editor, so I can not believe that it created some invisible character. Regardless of this, I ran mongify translation again (to generate a new file) and did not open it in the editor, I directly executed the mongify process, and the error persisted.

optimus93 commented 7 years ago

@anlek ..brother .i hope u remember that i had created an other issue related to deprecation warning and update fail ...all that was wrking... but now iam getting the issue above instance eval all of a sudden

C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in instance_eval': undefined local variable or methodas' for # (NameError) from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/database/table.rb:70:in instance_exec' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/database/table.rb:70:ininitialize' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:93:in new' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:93:intable' from (eval):1:in parse' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:ininstance_eval' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in parse' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/cli/command/worker.rb:59:inexecute' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/cli/application.rb:28:in execute!' from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/bin/mongify:15:in<top (required)>' from C:/Ruby23-x64/bin/mongify:22:in load' from C:/Ruby23-x64/bin/mongify:22:in

'

anlek commented 7 years ago

@roggaioso Sorry I missed your reply. Where you able to solve the issue? Did you ever figure out what made it? If not, maybe send me the translation file?

@optimus93 Please open a new ticket with an issue as this isn't related to the original issue. Also, it seems your translation.rb file might be messed up, but I'm not quite sure. Please include the file in the new issue.

optimus93 commented 7 years ago

Cooo cool.. thank u.. evrything is wrking fine...

roggaioso commented 7 years ago

I did not find the solution, so I did not continue the tests. Follow the file for your evaluation. translation.rb.txt

mitul69 commented 7 years ago

Hello,

I have same issue.

Here is the error.

C:/Bitnami/rubystack-2.3.4-4/ruby/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in `instance_eval': undefined local variable or method `"\xFF\xFEt"' for #<Mongify::Translation:0x3e35ae8 @all_tables=[]> (NameError)
        from C:/Bitnami/rubystack-2.3.4-4/ruby/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in `instance_eval'
        from C:/Bitnami/rubystack-2.3.4-4/ruby/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/translation.rb:62:in `parse'
        from C:/Bitnami/rubystack-2.3.4-4/ruby/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/cli/command/worker.rb:59:in `execute'
        from C:/Bitnami/rubystack-2.3.4-4/ruby/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/lib/mongify/cli/application.rb:28:in `execute!'
        from C:/Bitnami/rubystack-2.3.4-4/ruby/lib/ruby/gems/2.3.0/gems/mongify-1.3.1/bin/mongify:15:in `<top (required)>'
        from C:/Bitnami/rubystack-2.3.4-4/ruby/bin/mongify:22:in `load'
        from C:/Bitnami/rubystack-2.3.4-4/ruby/bin/mongify:22:in `<main>'

Here is my ruby file.

table "wp_users" do
    column "ID", :key, :as => :integer
    column "user_login", :string
    column "user_pass", :string
    column "user_nicename", :string
    column "user_email", :string
    column "user_url", :string
    column "user_registered", :string
    column "user_activation_key", :string
    column "user_status", :integer
    column "display_name", :string
end
eickhardt commented 5 years ago

Same issue.

table "backups" do
    column "id", :key, :as => :integer
    column "user_id", :integer, :references => "users"
    column "file", :string
    column "created_at", :datetime
    column "updated_at", :datetime
end

table "meaning_types" do
    column "id", :key, :as => :integer
    column "name", :string
end

table "meanings" do
    column "id", :key, :as => :integer
    column "real_word_type", :integer
    column "meaning_type_id", :integer, :references => "meaning_types"
    column "root", :string
    column "deleted_at", :datetime
    column "created_at", :datetime
    column "updated_at", :datetime
end

table "migrations" do
    column "migration", :string
    column "batch", :integer
end

table "password_resets" do
    column "email", :string
    column "token", :string
    column "created_at", :datetime
end

table "user_word_language" do
    column "user_id", :integer, :references => "users"
    column "word_language_id", :integer, :references => "word_languages"
end

table "users" do
    column "id", :key, :as => :integer
    column "name", :string
    column "email", :string
    column "password", :string
    column "remember_token", :string
    column "created_at", :datetime
    column "updated_at", :datetime
end

table "word_languages" do
    column "id", :key, :as => :integer
    column "short_name", :string
    column "name", :string
    column "image", :string
end

table "words" do
    column "id", :key, :as => :integer
    column "language_id", :integer, :references => "languages"
    column "meaning_id", :integer, :references => "meanings"
    column "text", :string
    column "deleted_at", :datetime
    column "created_at", :datetime
    column "updated_at", :datetime
    column "comment", :text
end

table "wotds" do
    column "id", :key, :as => :integer
    column "date", :date
    column "meaning_id", :integer, :references => "meanings"
end
sql_connection do
  adapter   "mysql2"
  host      "localhost"
  username  "root"
  password  "root"
  database  "vocab_mysql"
end

mongodb_connection do
  host      "localhost"
  database  "vocab-express-test"
end
C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.2/lib/mongify/translation.rb:62:in `instance_eval': undefined local variable or method `"\xFF\xFEt"' for #<Mongify::Translation:0x000000037b2a20 @all_tables=[]> (NameError)
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.2/lib/mongify/translation.rb:62:in `instance_eval'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.2/lib/mongify/translation.rb:62:in `parse'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.2/lib/mongify/cli/command/worker.rb:59:in `execute'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.2/lib/mongify/cli/application.rb:28:in `execute!'
        from C:/Ruby23-x64/lib/ruby/gems/2.3.0/gems/mongify-1.3.2/bin/mongify:17:in `<top (required)>'
        from C:/Ruby23-x64/bin/mongify:22:in `load'
        from C:/Ruby23-x64/bin/mongify:22:in `<main>'

ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32] Windows 10

eickhardt commented 5 years ago

Found it. I used this command to generate my translation file:

mongify tr .\database.config > db.rb

Opening db.rb in VS Code, you can see in the bottom right which encoding the file is in. It was "UTF-16 LE" for me. Clicking that and selecting "Save with encoding..." -> "UTF-8" made it work.

Thank you for this awesome tool by the way.

anlek commented 5 years ago

Thanks for sharing the solution!