こんにちは、
これはよくある質問(FAQ)のようですね。もしそうでしたら、事前に謝罪します。私が十分に探せていなかったようです
Webインターフェースではなく、ウィザードと同じことを行うスクリプトを作成するにはどうすればよいでしょうか?
それは、仕様テストのFabricate(admin) fixtureに似たものから始めることになります。また、コンテナのカスタムセクションから呼び出されるかもしれません。
ご協力いただき、ありがとうございます!
こんにちは、
これはよくある質問(FAQ)のようですね。もしそうでしたら、事前に謝罪します。私が十分に探せていなかったようです
Webインターフェースではなく、ウィザードと同じことを行うスクリプトを作成するにはどうすればよいでしょうか?
それは、仕様テストのFabricate(admin) fixtureに似たものから始めることになります。また、コンテナのカスタムセクションから呼び出されるかもしれません。
ご協力いただき、ありがとうございます!
Wizard は、サイトの設定と API 呼び出しの両方を兼ね備えています。
API 呼び出しについては、Discourse API のリバースエンジニアリング方法をご覧ください。サイトの設定については、以下の例を参照してください。
ただし、もしかすると私が混乱している点はここかもしれません:API を呼び出すには API キーが必要です。つまり、管理者ユーザーも必要ですが、私はまだ持っていません。API キーなしで API を呼び出すことは可能でしょうか?あるいは、ユーザーから独立しており、管理者権限を持つ API キーを取得することは可能でしょうか?
admin を使って管理者ユーザーを作成する必要があるようです。むしろ、管理者ユーザーは既に作成されているが承認されていないため、承認されるように変更する必要があるのかもしれません。
あるいは、api_key:create_master で API キーを作成し、それを使って管理者ユーザーを作成することもできるでしょうか?
root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'api_key:create_master[MASTERKEY]'
ad676e7413778aaaaa5d315c35f188591ef0edb4a4d4b2d644b9247a88421cfa
しかし、このマスターキーの使い方がよく理解できていないようで、以下は動作しません:
# curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c35f91ef0edb4a4d4b2d644b924b7a88421cfa"
{"errors":["You are not permitted to view the requested resource. The API username or key is invalid."],"error_type":"invalid_access"}
一方、管理者ユーザーを作成すると:
root@forum:/var/www/discourse# RAILS_DB=secondsite rake 'admin:create'
Email: loic@dachary.org
Password:
Repeat password:
Ensuring account is active!
Account created successfully with username loic
Do you want to grant Admin privileges to this account? (Y/n) Y
Your account now has Admin privileges!
その後、新しく作成したユーザーを指定して同じマスターキーを使用すると、以下のように動作します:
curl -X GET "https://forum2/categories" -H "Accept: application/json" -H "Api-Key: ad676e7413778aa3a5d315c358591ef0edb4a4d4b2d644b924b7a88421cfa" -H "Api-Username: loic"
{"category_list":{"can...
また、/admin/site_settings/category/branding にもアクセスできるため、管理者権限を持っていることが確認できます。
具体的に何を達成しようとしていますか?管理者ユーザーの作成と設定の一部を自動化したいのでしょうか?
はい、その通りです。ブラウザとの対話を一切必要としないスクリプトから、新しいフォーラムをゼロから作成し、ユーザー、カテゴリ、トピックを自動で追加したいと考えています。
おそらく、まずそのデータベースを作成し、インストールプロセスの一部として復元すればよいでしょうか?
データベースは用意されていません。ユーザー、カテゴリ、トピックは mailman2 のデータを使用して作成されます。
データをインポートしたい場合は、別のプロセスとして実行してください。
それがワンショットなら問題ありません。しかし、インポートスクリプトをテストしたいのです。テストを実行するには、まずゼロから Discourse を作成する必要があります。自動化されたテストの途中で何らかの手动介入を必要としないようにしたいのです ![]()
参考までに、これは私が Mailman2 を Discourse へ移行させるスクリプトの開発に取り組んでいる作業の一部です。このテストは tox から実行され、以下の処理を行います。
マルチサイトインストールを前提とすると、承認済み管理者ユーザーと管理者 API キーの作成は以下のように行えます。
docker exec app env RAILS_DB=secondsite rake 'api_key:create_master[MYKEY]'( echo user1@example.com ; echo $pass ; echo $pass ; echo ) | docker exec -i app env RAILS_DB=secondsite rake 'admin:create'注意: マルチサイトインストールでない場合は、env RAILS_DB=secondsite を削除してください。
その後、以下で動作確認を行います。
curl -X GET https://forum2/admin/backups -H "Accept: application/json" -H "Api-Key: 886171a73dd12759b5d6c1915b0f0d4475e8b3fff3d97954b95171200b6" -H "Api-Username: user1"
[]
(インスピレーションを与えてくれた Jay Pfaffman さんに特別感謝します https://meta.discourse.org/t/piping-into-rake-admin-create/73643)
これらを実行すると、Discourse はウィザードの実行を必要としなくなります(ただし、実行すべきという表示は残ったままです)。
輸入業務で生計の重要な部分を賄っています。以下に説明することは、定期的に入力をしている人々にとってほぼ一般的なやり方だと確信しています。
お勧めするのは以下の手順です。
移行タスクと本番サーバーのセットアップタスクは完全に異なり、それぞれ異なる要件があります。通常、移行タスクには本番サーバーには不要な要素が含まれます(ただし、Mailmanインポーターは例外だと思います)。
マルチサイトサーバーで移行を実行するのは、特に愚かな行為のように思えます。
アドバイスありがとうございます。この手順に従います。100GB 以上の mbox アーカイブがあるため、少なくとも数回のテストが必要になるでしょう。
それについてですが…mbox インポーターは常に新しいカテゴリを作成し、既存のカテゴリを使用できないように見えます。これについて何かご存知でしょうか?
foolhardy(無謀な)という言葉の意味は知りませんでしたが、気に入ったので今後使わせていただきます ![]()
だからこそ、最初からインポートを再実行するのは「悪いアイデア」です。それにはおそらく数週間かかるでしょう。インポーターを再実行すると、新しいデータのみがインポートされます(私はよく、古いデータを完全にスキップするようにインポーターを修正しています)。
CategoryCustomField を作成することで、既存のカテゴリを使用するようにスクリプトを修正できるかもしれません。空のデータベースから始めて、スクリプトにカテゴリを作成させることをお勧めします。その後、好きなようにカスタマイズできます。スクリプトを再実行すると、そのカテゴリを引き続き使用します。
インポートにおける本当の危険性は、年々データに差異が生じる可能性があり、10年前のデータで動作するものが5年前のデータでは動作しないなど、状況が異なる点です。ただし、運が良ければうまくいくかもしれません。
それが褒め言葉なのかどうかはわかりませんね ![]()
私はいつもインポートにはマルチサイトを使用しています。これにより、複数のフォーラムが共存できるようになります。私が調整しているフォーラムと、隣接するフォーラムでクライアントがインポートを確認できる環境です。また、特定の時点から再開するためにデータベースをコピーするのも簡単です。
待ってください…なんて!?
まあ、驚きです!CDCK 社に所属していない人で、インポートについて私よりも詳しい知識を持つ人は、あなたがほぼ唯一でしょう。あなたがインポートにマルチサイトを使用するなら、私も同様に検討します。一般的には、同じホスト上で個別のコンテナを起動し、その前面に Traefik を配置していますが、それはある意味では同じようなものかもしれませんが、実際には異なります。