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
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.