paultaylor
(Paul Taylor)
1
Discourseでユーザーを作成し、アクティブな状態として表示させるために、最低限どのテーブルに行を追加する必要がありますか?
私は user_emails テーブルに1行挿入しただけです。
insert into user_emails (user_id, email, "primary", created_at, updated_at) values (2,'user@email.com',true, now(), now());
予想通りGUIには表示されませんでしたが、最低限必要な手順は何でしょうか?さらに他のテーブルに追加する必要があるのか、それとも再起動が必要なのでしょうか?
おそらく「それは正しい方法ではない」と言われると思いますが、その点は理解しています。ただ、私にとっては以下の理由からこの方法が有効かもしれません(いくつかの前提が誤っている可能性もありますが、私の理解は以下の通りです)。
- 他のデータベースベースのフォーラムからデータをインポートするスクリプトは、Discourseインスタンスから元のフォーラムに接続できることを前提としています。しかし、ライブのDiscourseインスタンスから元のフォーラム(jforum)にアクセスするのは、困難か不可能でしょう。また、古いフォーラムが置かれている非常に古いサーバー上にDiscourseの開発環境を構築することも不可能です。
- Ruby on Railsの理解が乏しいため、既存のスクリプトを修正できませんが、SQLは理解できます。
- APIを利用することも可能ですが(ユーザー数は5,000人程度)、MD5パスワードハッシュを維持し、全ユーザーにパスワードリセットを強要したくないため、APIだけでは実現できないと考えています。
- jforum用のインポートスクリプトがあるため、jforumからデータを抽出するために必要なSQLを確認し、CSVファイルに変換してデータベースに読み込むことは可能です。
- バルクインポーターを使えばDiscourseにSQLを直接追加できるかもしれませんが、具体的なSQLが見つけられずにいます。
- ユーザーの移行が最も重要な課題であり、その後はカテゴリ、トピック、投稿の追加はそれほど難しくないはずです。
pfaffman
(Jay Pfaffman)
2
その通り!
理解していたなら、こんな質問はしていませんよね。
データベースが破損する可能性は非常に高いです。そうなると、誰もあなたを助けることができなくなります。
データベースをダンプして、ローカルの Discourse サーバー(または接続可能な場所であればどこでも構いません。私は自宅のインターネット回線を使ってリモートデータベースから大規模なインポートを行ったことがあります)で復元し、既存のスクリプトを実行してください。
あなたが理解していない Ruby を使う方が、SQL を書く方法を理解するために Ruby を十分に理解するよりもはるかに簡単です。私は最初のインポーターを作成してからずっと後に Ruby を学びました。
paultaylor
(Paul Taylor)
3
それは少し上から目線ですね!
バッチインポートスクリプトが SQL を実行しているなら(おそらくそうだと思いますが)、ユーザー作成に必要な SQL を文書化することは、バッチインポートスクリプトを使用するのと同じくらい危険ではありません。况且、私は現在バニラの Discourse インストール環境を持っているので、何か問題が起きても大した影響はありません。私の開発経験はあなたよりも長いはずです。
私があまり経験がないのは、すべての管理タスクです。ローカルの Discourse サーバーを初めてインストールしようとしたところ、面倒な問題が次々と発生しました。Discourse サーバーから JForum の MySQL サーバーに接続できない場合、MySQL もインストールしてデータベースを移行する必要があります。既存の JForum スクリプトはメインのソースツリーにチェックインされておらず、また私は非常に古いバージョンの JForum を使用しているため、動作するとは期待していません。
pfaffman
(Jay Pfaffman)
4
失礼する意図はありませんでした。もしかして、
が見逃されましたか?
その通りでしょう!
Discourse でフルタイムに3年以上携わり、数十回のインポートを行い、複数のインポーターをゼロから作成してきた人物からの無料アドバイスは、それに見合う価値があるものです。
michaeld
(Michael - Communiteq)
5
SSHトンネルを設定するのはどうでしょうか?
不整合なだけかもしれません。破損しているわけではありません。
ただし、API を使ってユーザーを作成し、その後 SQL を使用してカスタムフィールドに md5 ハッシュを挿入することは可能です。これで両方の利点を活かすことができます。
pfaffman
(Jay Pfaffman)
6
おっ!それはかなり素晴らしいアイデアですね。
これがあなたが探している無料のアドバイスです!
paultaylor
(Paul Taylor)
7
はい、その考えはありましたが、MD5 ハッシュがどのように機能するかを完全に理解していなかったので、それが可能かどうかは明確ではありませんでした。わかった、試してみます。
michaeld
(Michael - Communiteq)
8
必要なことは、カスタムフィールドを挿入するだけです:
- user_id:明らかなもの
- name: “import_pass”
- value: MD5 ダイジェスト
そして、migratepassword プラグインをインストールしてください。
paultaylor
(Paul Taylor)
9
ありがとうございます。いくつか質問がありますので、お手伝いいただけると幸いです。
インストール
Discourse ディレクトリで `bundle exec rake plugin:install repo=http://github.com/[Communiteq](https://www.communiteq.com) (formerly DiscourseHosting)/discourse-migratepassword` を実行してください
Discourse を再起動してください
-
インストールは完了しましたが、Discourse をどのように再起動すればよいでしょうか?
-
カスタムフィールドをどのように追加すればよいでしょうか?SQL 文を教えていただけますか?それとも、"user_fields[1]": "string" のような形式で API を使用して設定できますか?現在、API を使ってプログラム的にユーザーを作成することは可能ですが、このフィールドは現在無視しています。
-
プラグインがインストールされている場合、ユーザー作成 API リクエストで渡されるパスワードの値は無視されますか?
michaeld
(Michael - Communiteq)
10
- いいえ、カスタムフィールド内の md5 ダイジェストよりも優先されます。
他の 2 つの質問への答えは、このフォーラムで簡単に見つけることができます。時間を節約したい場合は、有料サービスとしてインポートおよび/またはホスティングを行うこともできます。
paultaylor
(Paul Taylor)
11
両方の回答を検索しましたが、見つかりませんでした。最初のケースでは、yaml ファイルを編集して docker を再起動してインストールする方法と、このように docker コンテナ内でインストールされる方法があり、混乱を招きます。この場合の「再起動」が何を意味するのか明確ではありません。
このフォーラムには純粋な SQL はほとんど見当たりません。
このオープンソースソフトウェアを利用する際に有料サービスの販売を強く推奨する姿勢に驚かされます。stackoverflow で質問した際には、このようなことはなかったのですが。
michaeld
(Michael - Communiteq)
12
考えること、イノベーション、貢献するのが大好きです。でも、生活もしていかなければなりません。そのため、どこかで線引きをしなければなりません。私は、イノベーションや貢献、思考のプロセスではなく、単なる「作業」をしていると感じる場所で線引きするようにしています。
ユーザーのカスタムフィールドに関するSQLクエリを探すのは、私にとっては「作業」です。経験豊富な開発者であるあなたなら、きっと自分でも見つけ出せるでしょう 
paultaylor
(Paul Taylor)
13
もちろん、自分で調べて解決することもできますが、
このフォーラムで簡単に検索できる
という点については、聞いても問題ありません。
他の質問については、まだ私には明確ではありません。
あなたが私の仕事を代わりにやってくれることを期待しているわけではありませんが、ドキュメントがユーザーに多くの前提を置いていることに、私は一般的にイライラします。
paultaylor
(Paul Taylor)
14
OK、質問2です。user_id が 5 のユーザーにカスタム import_pass フィールドを追加する例を示します(user_id は user_emails テーブル、または users テーブルの id から確認できます)。
insert into user_custom_fields (user_id, name, value, created_at, updated_at) values (5,‘import_pass’,‘2aee1c40222c7754d4534e61452612cc’, now(), now());
paultaylor
(Paul Taylor)
15
わかりました、見つかりました。
./launcher restart app
しかし、再起動しているようには見えません。アプリにはアクセスしてデータベースに接続できますが、Web サイトには接続できません。再構築して最初からやり直す必要があるかもしれません。
paultaylor
(Paul Taylor)
16
それで、./launcher rebuild appを実行したところ、元通り動作するようになりました。
これでデータベースが再作成されると思っていたのですが、そうではありませんでした。おそらく、実際のデータベースは Docker の外で永続化されており、rebuild は Docker アプリの再構築のみを行うためでしょう。また、yaml ファイルを修正して追加した dataexplorer プラグインもまだ残っています。しかし、passwordmigration プラグインも残っているのでしょうか?それとも rebuild によって削除されてしまうのでしょうか?管理ページのプラグインセクションには確かに何も表示されていません。
さて、passwordmigrationをインストールしてから再度 restart を実行しましたが、またしてもサイトがダウンしてしまいました。どうやら passwordmigration が何かを壊しているようです。
再度ビルドし直して動作するようにしましたが(今度は passwordmigration プラグインが欠落しています)、migrationpassword をインストールせずに ./launcher restart appを実行すると、正常に再起動します。つまり、私の環境では migrationpassword に特有の問題があるようです。
pfaffman
(Jay Pfaffman)
17
前回の試行では、passwordmigration プラグインがインポート実行と互換性がなかったため、インポート後にインストールする必要があります。
リビルドを破損させている可能性もありますが、リチャードがホスティングでこれを使用しているため、かなり驚きです。インポート後に、データエクスプローラーと同様に app.yml にインストールすることをお勧めします。
新しいデータベースを取得したい場合は、/var/discourse/shared/standalone 内の postgres ディレクトリを rm -rf で削除してください。詳しくは https://meta.discourse.org/t/advanced-troubleshooting-with-docker/15927 をご覧ください。
paultaylor
(Paul Taylor)
19
変ですね。データベースを削除して ./discourse-setup を実行し、真っ新なインストール状態にしたら、すべて正常に動作していました。
migrationpassword を rake でインストールして再起動しましたが、またしてもウェブサイトで 502 エラーが発生します!
DataExplorer プラグインは残っていたので、それを削除して再構築したところ正常になりました。その後、migrationpassword を再インストールすると、また 502 エラーが発生します。
他の人では明らかに動作しているのに、私のバニラインストールでは動作しないため、非常に混乱しています。
次に、app.yml ファイルを編集してインストールを試みます。
paultaylor
(Paul Taylor)
20
(クリスマスショッピングのせいで遅れましたが)ついに app.yml を編集して再構築し、migratepassword のインストールを試みました…そして成功しました!
ただし、bundle exec rake plugin:install repo=http://github.com/[Communiteq](https://www.communiteq.com) (formerly DiscourseHosting)/discourse-migratepassword というオプションは、私のバニラインストールでは動作しません。おそらく、GitHub - communiteq/discourse-migratepassword: Support migrated password hashes · GitHub の README.md で確認または削除する必要があるかもしれません。