これは正しいですか?開発版のインストールにはどのくらい時間がかかりますか?

Discourse の開発版を、FluxBB フォーラムを Discourse に移行し、エクスポートして本番環境の Discourse にインポートするためだけに、DigitalOcean の Ubuntu 20.04 ドロレットにインストールしようとしています。

Docker 版の本番環境バージョンは、FluxBB からの移行なしにテストとしてインストールすることに問題はありませんでした。

しかし、このガイドを使用して Discourse の開発版をインストールしようとすると:

以下のコマンドを実行すると、完了しないことが分かりました:

bundle exec rake autospec

完了を待って約 30 分が経過すると、リモートセッションがタイムアウトします。

また、多数のエラーが発生しています。残念ながら手元にエラーログはありませんが、すべて「ある関数が常に nil を返す」というタイプのものでした。

そのコマンドが何をするものなのか、あるいは必要なのか分からないため(手順には「仕様の実行を試す」と書かれているだけで、それが何であり、なぜ行う必要があるのかは説明されていません)、次のコマンドを実行することにしました:

bundle exec rails server --binding=0.0.0.0

これも永遠に完了せず、Terminal に理解できない出力が多数表示されます。エラーなのかそうでないのか分かりません。

そこで質問ですが、これは想定された動作でしょうか、それとも私が何か間違えているのでしょうか?これらのコマンドが完了するまで、おおよそどれくらいの時間がかかるのが普通でしょうか?

また、開発版を使用せずに、Docker 版の本番環境 Discourse で FluxBB フォーラムを移行することは可能でしょうか?現在、本番サイトはまだ存在しないため、壊しても問題ありません。いつでも破棄して再作成できます。

これはサーバーが実行されていることを意味します。もちろん、Ctrl+C を押すかターミナルを閉じるまで、サーバーは引き続き実行され続けます。

サーバーを停止しない限り、情報は無限にターミナルに出力され続けます。

実行してから数秒で、ブラウザからウェブページにアクセスできるようになります。

ブラウザで正しいポートに接続していますか?通常は 3000 です。

本番環境でのインポート実行に関するハウツー記事がいくつかあります。実行したいスクリプトのガイドとして、それらのいずれかを利用できるかもしれません。

開発環境をインストールされているようなので、その環境でスクリプトを実行するのが適切と思われます。

ブラウザに何も表示されていません。ターミナルで top を実行すると、Ruby プロセスが実行されているのが確認できます。

bundle exec rails server --binding=0.0.0.0 を実行した後、ターミナルの出力が永遠に走り続ける場合、それはドキュメントに明記すべきではないでしょうか。通常、ハウツーガイドを実行する際は、コマンドが何かを行い、完了してインストールが完了し、準備が整ったことを示す情報を表示すると期待します。

本番サーバーでインポートを実行する方法に関するチュートリアルがいくつかあります。

それらはどこにあるでしょうか?FluxBB に関する唯一のものは、開発環境でのインストールで行うように明記されています:

Webサーバーを起動したら、管理者が停止させたいと望まない限り、それは停止するものではないという考えは、常識とみなされていると思います。Webサーバーは通常、毎日毎日ページを提供するために存在します。しかし、確かにその点を明確化する追記を加えることも可能です。ガイドの改善案は、誰でもプルリクエストを通じて提出できます。

しかし、そのコマンドがウェブサーバーを起動することは常識でしょうか?単に「rails server」と表示されるだけで、それがウェブサーバーであるとは限りません。Apache ウェブサーバーを起動すると、すぐにコマンドプロンプトに戻りますが、Terminal が無限にメッセージを吐き出すわけではありません。

Rails は Web アプリケーションフレームワークです。それを Apache と直接比較するのは公平ではないと思います。

私は、Rails が実際に動作している様子を目で確認できる点が気に入っています。停止すれば、通常は何か問題が起きているはずです!この出力は、特に開発環境では、状況に応じて有用です。表示される情報の量は、環境設定で変更できます。

ちなみに、ドキュメントによると、Rails は -d オプションで「デーモン化」できます。なぜ標準インストールではそれが機能していないように見えるのか、ご自身で調べてみてください。それによって制限が導入されている可能性があります。その点については、チームに相談するのが最善です。

@epsteindidnt さん、こんにちは

Rails 開発に慣れてくると、私のように、あなたが「Terminal に無限に情報が溢れること」と表現しているものが、実は最高の味方になることに気づくはずです。

例えば、現在私はあるクライアントのために Rails アプリを開発しており、彼らの何十年も前のレガシーなビジネスロジックを Rails に移行する作業を行っています。私はその「Terminal に無限に溢れる情報(あなたの言葉)」を見るために、わざわざ新しいモニターを購入しました。なぜなら、その情報は開発者にとって輝く黄金だからです。

Rails サーバーのログは、何が起きているかについて詳細かつ精巧な情報を提供しますが、それに加えて、もう一つの「開発者の最高の味方」があります。それは Rails コンソールです!

Rails 用のコードを書く際、私は基本的に VSC でドラフトを作成し、その後、スニペットを Rails コンソールにコピー&ペーストして、すべてが期待通りに動作することを確認します。

デバッグ時には、コード内に Ruby の print 風ステートメント(pputs)を書き込み、画面に表示される「輝く黄金の Rails サーバーログ情報の無限のストリーム」で何が起こっているかを観察します。私のエラーのほとんどは、この方法で修正されています!繰り返しになりますが、あなたがうんざりしている Rails サーバーログの情報を見るために、最近、スタンドアロンの曲線型ゲーミングモニターを新たに購入したほどです :slight_smile:

あなたの投稿を読む限り、あなたは今年の初め頃の私と少し似ているようです。Rails 開発の経験がないまま Rails アプリケーションへの移行に取り組んでいます。当初、私も Rails に対して(少し以上)うんざりしていました。しかし、9 ヶ月経った今、私はクライアント向けに毎日 Rails だけで開発しており(私はセミリタイアのため、クライアントワークは半日が限界です)、以前の PHP 開発はすべてやめました。正直に言うと、Rails(そして Ruby)に対する新たな情熱を強く抱くようになりました。遅くとも遅すぎず、ということわざもありますね!

Apache2 についてですが、Apache は Rails のようなアプリケーションの裏側で何が起こっているかについて、精巧な詳細を提供しません。私は Apache2 をすべての Rails アプリケーションの前にリバースプロキシとして運用していますが、正直なところ、Apache のログファイルを見たのはいつだったか思い出せません。なぜなら、すべてのデバッグは、あなたが現在うんざりしている Rails サーバーログを使って行っているからです :slightly_smiling_face:

最後に、以前「フォーラムを Rails に移行した人」としての異なる視点が、何かしらの小さな助けになればと心から願っています。私にとって、LAMP ウェブアプリから Rails ウェブアプリへと移行せざるを得なくなったことは、2020 年に個人的に起きた最高の「テック的な出来事」の一つでした。

良いお正月を!

私も最近これに少し怯えていました。今日わかったことは次のとおりです。

rails s ターミナルの出力には、起動時に多くのクエリが表示されますが、それには Discourse の Sidekiq ジョブからの出力 も含まれます(少なくとも Docker 開発セットアップではそうです)。したがって、大規模なインポートを実行している場合、完了後もしばらく実行される可能性のある、大量の Sidekiq キューの後処理ジョブが発生します。これらは非本質的なジョブ(キャッシュの読み込みなど)であり、完了前にサイトの閲覧を妨げるものではないようです。

大規模なインポートを実行し、それを元に戻してデータベースを再初期化して小さなテストインポートを実行したのですが、存在しなくなった大規模データベースに関連するクエリを延々と実行し続けていたため、これは私を混乱させていました。解決策は、Rails コンソールを使用して Sidekiq キューを空にすることでした。

あなたには遅すぎますが、共有しておきます。