activewarehouse / activewarehouse-etl

Extract-Transform-Load library from ActiveWarehouse

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MySQL connection issue

epinault opened this issue · comments

I am constantly getting an error around mysql_connection or mysql2_connection method missing.

/home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activerecord-3.2.8/lib/active_record/dynamic_matchers.rb:50:in `method_missing': undefined method `mysql2_connection' for #<Class:0xb7536da0> (NoMethodError)
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:214:in `establish_connection'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:143:in `connection'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:219:in `connection'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:213:in `query_rows'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:100:in `columns'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:160:in `block (2 levels) in write_local'
    from /home/emmanuel/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/csv.rb:1340:in `open'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:159:in `block in write_local'
    from /home/emmanuel/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in `realtime'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:158:in `write_local'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/control/source/database_source.rb:115:in `each'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:335:in `each_with_index'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:335:in `block in process_control'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:329:in `each'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:329:in `process_control'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:277:in `process'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:274:in `process'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/engine.rb:55:in `process'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/commands/etl.rb:82:in `block in execute'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/commands/etl.rb:80:in `each'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/commands/etl.rb:80:in `execute'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/lib/etl/commands/etl.rb:90:in `<top (required)>'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `require'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `block in require'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:236:in `load_dependency'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `require'
    from /home/emmanuel/talemetry/talemetry_warehouse/vendor/ruby/1.9.1/gems/activewarehouse-etl-1.0.0/bin/etl:28:in `<top (required)>'


I went to line 212 and change it to establish connection and it goes further.. but then other errors arises. I believe this is not compatible at all with the newer version of Active record that does include directly now also the gem for mysql and mysql2 

  def establish_connection(name)
        raise ETL::ETLError, "Connection with no name requested. Is there a missing :target parameter somewhere?" if name.blank?

        logger.debug "Establishing connection to #{name}"
        conn_config = ETL::Base.configurations[name.to_s]
        raise ETL::ETLError, "Cannot find connection named #{name.inspect}" unless conn_config
        connection_method = "#{conn_config['adapter']}_connection"
        connection_method = "establish_connection"

        ETL::Base.send(connection_method, conn_config)
      end
    end # class << self

What is the latest version supported for active record? 

Ok, so here is a bit of a good news and how I can work around mysql issue:

I had to create in config:
- postgres.yml
- mysql.yml

Both need to contains config to their own database for reading or writting as well as the require etl_execution.

Once it was created on both side, then running with the -c flag allowed me to perform reading from mysql to File and then File to Postgres :)

Clearly AR does not deal very well with have 2 adapter loaded (and seems to be a common issue or question

http://stackoverflow.com/questions/11943933/using-two-different-db-mysql-and-postgres-for-a-single-rails-app)

So you could document the finding :) Got it to work with the most recent of AR 3.2.8 .

I believe the mess of having multiple adapter loaded in AR is not sorted out and this is not and active warehouse problem :)

Oh crap! Thanks for reporting this. Very good to know!

I think (/cc @fearoffish) this is another good reason to start becoming more agnostic in the future.

I'm creating a specific documentation issue so we can add a link in a future FAQ.

Thanks a ton :)

Do you think we can close this one (once I have opened the doc issue?).

We can definitely close it once you have one about the doc :) I am not going to investigate further! I even think it is better anyway to just do DB to FILE , FILE to OTHERDB in general because it makes it easier to distribute tasks efficiently so seems ok. I am surprised AR is that weak but not so surprised either ;)

Hehe - AR is good at very specific scenarios :) It's definitely not a general purpose data access layer.

Closing this, now that #118 is opened to track the FAQ.