1

したがって、これら 2 つの sidekiq ワーカーがあり、どちらもデータベースに接続してデータを保存する必要があります。特定のデータベースは、アカウントに基づいて変更できます。

これが機能するものです:(ワーカーには他のメソッドがあります)

class GaDataloadProcessor < GaWorker
  attr_reader :profile, :dataload, :connection, :results

  def perform(id)
    @dataload = Dataload::GoogleAnalytics.find(id)
    connector = dataload.google_analytics_connector
    with_session(connector.username, connector.password) do
      load_profile(connector.account, dataload.profile)

      run_report

      setup_db_connection

      import_results
    end
  end

  private

  def setup_db_connection
    @connection = ActiveRecord::RdsDb.get_connection(dataload.account)
  end

有効な ID を使用してコンソールでこのワーカーを開始すると、次のようになります。

irb(main):004:0> ga_worker.perform(2)
  Dataload::GoogleAnalytics Load (3.0ms)  SELECT "dataload_google_analytics".* FROM "dataload_google_analytics" WHERE "dataload_google_analytics"."id" = $1 LIMIT 1  [["id", 2]]
  Connector::GoogleAnalytics Load (0.7ms)  SELECT "connector_google_analytics".* FROM "connector_google_analytics" WHERE "connector_google_analytics"."id" = 7 LIMIT 1
  Account Load (1.2ms)  SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = 16 LIMIT 1
   (76.1ms)  insert into google_analytics_test2 (visitors,date) values ('4','20131018')

素晴らしい、期待どおりに動作します。このワーカーは機能しません (悪いワーカー): (ワーカーには他のメソッドがあります)

class CmpUpdateWorker < BaseWorker
  attr_reader :dataload, :connection

  def perform(dataload_id)
    @dataload = DataloadMailchimp.find(dataload_id)
    @gibbon = Gibbon.new(@dataload.api_key)

    setup_db_connection

    run_report
    import_results
end

private

  def setup_db_connection
    @connection = ActiveRecord::RdsDb.get_connection(dataload.account)
  end

このワーカーをコンソールから実行すると、次のようになります。

irb(main):002:0> cmp_worker.perform(5)
  DataloadMailchimp Load (68.0ms)  SELECT "dataload_mailchimps".* FROM "dataload_mailchimps" WHERE "dataload_mailchimps"."id" = $1 LIMIT 1  [["id", 5]]
NoMethodError: undefined method `rds_username' for 16:Fixnum

16 は正しい account_id であり、データベース内にあります。そのレコードには、正しい rds_username およびその他のデータベース接続値も含まれています。

ワーカーで参照される両方のモデルには、belongs_to :account があります。私はこれをテストして絞り込もうとしていますが、行き詰まっています。ここに投稿したコードよりもはるかに多くのコードがあることはわかっています。これを解決するのに役立つ可能性のあるものを要点またはレポへのアクセスに追加できれば幸いです。

アドバイスや指示をいただければ幸いです。ありがとう。

4

1 に答える 1

0

setup_db_connection を次のように更新して、CmpUpdateWorker を実行しました。

def setup_db_connection
    @connection = ActiveRecord::RdsDb.get_connection(@dataload.account)
  end
于 2013-10-21T06:21:51.660 に答える