vBulletin 4 のインポートで、数百万件の投稿があるようです。サーバーが非常に遅いため(私が諦めたとき、ユーザーは 1 分あたり約 50 件のインポートでした)、概算ですが 3 か月かかります。
そこで、バルクインポートスクリプトをもう一度試してみることにしました。通常のインポートスクリプトは本番環境のコンテナで実行しています。標準スクリプトを問題なく実行していた同じコンテナが、Discourse データベースにアクセスできません。しかし、バルクインポーターは、本番環境や通常のインポートスクリプトが使用するものを使用するのではなく、/var/run/postgresql/.s.PGSQL.5432 にアクセスしようとします。そこで、これを web_only.yml に追加しました。
- volume:
host: /var/discourse/shared/data/postgres_run
guest: /var/run/postgresql
これで postgres にアクセスできるようになりました。
しかし、mysql にアクセスできなくなりました。通常のスクリプトやコンテナ内の mysql コマンドラインで機能するのと同じ認証情報が機能しません。アクセス拒否のエラーが発生します。認証情報がすべて期待どおりであることを確認するために puts を追加しましたが、そのとおりでした。しかし、通常のスクリプトからのコード:
@client =
Mysql2::Client.new(host: DB_HOST, username: DB_USER, password: DB_PW, database: DB_NAME)
は問題なく動作しますが、こちら:
@client =
Mysql2::Client.new(
host: host,
username: username,
password: password,
database: database,
reconnect: true,
)
は動作しません。確認したところ、
puts "#{username}:#{password}@#{host}/#{database}"
puts "PASSWORD: #{password.inspect}"
はすべて期待どおりに表示されます。
開発環境で実行する必要がありますか?(なぜですか?)
mysql クライアントと通常のインポートスクリプトでは mysql 接続が機能するのに、バルクスクリプトでは機能しない理由がまったくわかりません。コードは同じように見えます。base.rb スクリプトには mysql に関する情報は何もありません。
あるいは、このマシンは呪われているのかもしれません。