名前

Mojolicious::Guides::FAQ - 頻繁に尋ねられる質問

説明

このドキュメントはMojoliciousに関してもっとも頻繁に尋ねられる質問と答えをふくんでいます。

質問

Mojoliciousは他のPerlのWebフレームワークとどのように比較することができますか

「Webフレームワーク」という言葉は、他のよりもより逐語的に解釈されるので、 短い答えとしては「できない」というものです。 リアルタイムWebやWebSocketのような新しいテクノロジーが出現して、 LWPのように一般的に利用されてきたモジュールが設計されたことを超えた、 新しい挑戦に直面しています。 このために、Mojoliciousは、Mojoと呼ばれる完全に新しいHTTPクライアント/サーバースタックを含んでいいます。これは、もともとはLWPngの努力によって強く鼓舞され、注意深く新しい要求のためにデザインされたものです。 それで、上位の抽象レイヤーのいくつかは、他のWebフレームワークと似ているように見えますが、 実際は完全に新しいカテゴリーとして定義され、未来のより進んだカテゴリーとして、 基礎付けられるのではないかとさえ考えています。

なぜMojoliciousはまったく依存を持たないのですか

私たちは妥協することなく使いやすさと開発スピードに焦点をあててMojoliciousを最適化しています。 Mojolicious::Guides::Contributingには依存を禁止するルールはありませんが、 すばやい苦労のないインストール処理を好むので、今のところオプショナルなものではないものを 追加する気持ちは起きません。 実際はすでに、高度な機能を提供するために、もしインストールされているのであれば、 EV, IO::Socket::IP, IO::Socket::SSL,Net::DNS::NativePlackなどのいくつかのオプショナルなモジュールを利用しています。

なぜ再発明をするのですか

それらを応用可能なものにできるからです。 使いやすさと開発スピードを焦点にあててデザインされたコンポーネントを 手に入れるのは簡単ではありません。 「ひとつ以上のやり方がある」というPerlのマントラを強く信じていますが、 よくデザインされたデフォルトはユーザーの経験によりよい楽しさをもたらすものである ということも信じています。 両方のよい部分がほしいのです。

後方互換性についてはどうですか

Mojolicious::Guides::Contributingとの一致において、 互換性のない方法において、削除や変更がある前に、 最新のひとつのメジャーリリースのなかで、その機能を いつも廃止予定にします。 しかしながら、新しい機能は実験的なものとマークされ、このルールの除外になっています。 これはMojoliciousの健全な未来を保証するために、必要な自由を与えます。 それで、実験的でない機能、試験されていない機能、ドキュメントされていない機能を使っていない限りは、 後方互換性をいつも期待することができ、そうでないものはバグと考えられます。 ただし、偶発的な破損のリスクを完全に回避するには、 バージョン固定の現在のベストプラクティスに従うことをお勧めします 生産セットアップ用のCarton

なぜMojoliciousは多くの小さなディストリビューションに分割されないのですか

利点がないからです。 それを行うことは、わたしたちにメリットはないですが、メンテナンスコストを大幅に情報させ、 インストールの時間を増加させます。 モジュールの所有を新しいメンテナに渡せるときだけ意味があるかもしれませんが、 わたしたちはすでに過去にそれを行っています。

Mojoliciousのパッチについてどこで議論できますか?

公式IRCでL への貢献を議論したいと思います C のチャネルC <#mojo>(chat now!)。

どのバージョンのPerlをMojoliciousはサポートしていますか。

最初に、perlpolicyに関することに気がつく必要があります。 コミュニティは最近のふたつの安定したリリースだけを サポートします。これは現在は、5.28.x and 5.26.xです。 Mojoliciousはこのモデルにしがたい、これらのふたつのリリースを 完全にサポートします。 加えて、サポートする価値があると考えるある古いバージョンまで、 Mojoliciousのディストリビューションをインストールできるようにしています。 最適化はされません。これは現在は5.10.1です。

Perlバージョン5.10.xおよび5.12.xは、 L 、安定性を避けるためにそれらを使用しないことを強くお勧めします およびセキュリティの問題。コミュニティ内の非常にボーカルな少数派ではない場合 これらのバージョンはまったくサポートしません。

WindowsはMojoliciousでどの程度サポートされていますか?

ディストリビューションをインストール可能な状態にするよう努力しますが、 Windowsは、Mojoliciousによって公式にサポートされていません。 。深刻なセキュリティがあるか、または信頼性の問題があります。 次のようなより高度な機能の一部subprocesses and the Hypnotoad。 Webサーバーでは、次の使用も必要です。 Windows Subsystem for Linux

Mojoliciousをテストする前に、環境をクリーンにする必要がありますか

Mojoliciousは、内部的にも外部的にも、多くの環境変数を使用しています。 これらはMojo_*というプレフィックスを持ちます。 テストケースは、クリーンな環境を想定しています。 標準ではない環境で試験を行う場合は、サポートしていません。 テストは成功しないかもしれません。 それゆえ、Mojoliciousをインストールまたはアップグレードすし、 テストを実行するときは、これらの変数を設定しない環境で、 行うことを推奨します。

ファイル拡張子は、どこに行ってしまったのですか。

標準のルートプレースホルダーは、.文字にはマッチしません。 しかしながら、 Mojoliciousのルートは、.htmlのようなファイル拡張子を見、 続く.を除去し、formatスタッシュ値の中に、結果を保存します。 これは、ファイル拡張子に基づいた、 自動的に描画される異なるテンプレートのような URLベースのコンテントネゴシエーションで便利です。 フォーマットのカスタマイズの情報は Mojolicious::Guides::Routingフォマットを見てください。 また、Mojolicious::Guides::Routingリラックスプレースホルダー を使うことを考慮してください。 これは、.文字のマッチを許可します。

コマンドラインからHypnotoadを設定できますか?

いいえ、できません、L は、この点で少し特別です。 ダウンタイムのないソフトウェアアップグレード(ホット デプロイメント)を始めるときに、既に実行中のサーバーに対して、USR2シグナルのみを送信していますので、 他の情報を渡すことはできません。代わりに設定のために L またはL を使用してください

# myapp.conf
{
  hypnotoad => {
    listen  => ['http://*:8080'],
    workers => 10
  }
};

または、ダウンタイムのないソフトウェアアップグレードが実際に必要ない場合は、 L を代わりに使ってください。それ以外はHypnotoadと同じです。

$ ./myapp.pl prefork -m production -l http://*:8080 -w 10

"Maximum start-line size exceeded."のエラーは何を意味していますか

これは、リクエスト行、ステータス行、ヘッダーなどの、HTTPメッセージの\r\nで終わる部分の最大の長さの制限です。 この制限はデフォルトで10KBですが、MOJO_MAX_LINE_SIZE環境変数を使って、この値を変更することができます。

エラー「... certificate verify failed」はどういう意味ですか?

このエラーには多くのバリエーションがありますが、それらのほとんどはTLS Mojo::UserAgentでの証明書の検証に失敗したということです。これは通常 2つの理由で起こります。最も一般的なのは、ピア証明書が単に無効であることです。 その場合、MITM攻撃が試行されていないことが確実な場合、 属性"insecure" in Mojo::UserAgentまたは証明書の検証を無効にする環境変数MOJO_INSECUREを使用できます。 。それ以外に、Mozilla::CAモジュールが欠落している場合があります。これは多くの場合、 IO::Socket::SSLによって、証明書を検証することが必要とされます。

"Maximum header size exceeded"のエラーは何を意味していますか?

これは前の答えで説明されたものとほぼ同じですが、 HTTPリクエストとHTTPレスポンスのヘッダーの最大の長さの制限です。 制限は、デフォルトで、8KBで100のヘッダです。 Mojo::Headersmax_linesMojo::Headersmax_line_size あるはMOJO_MAX_LINESMOJO_MAX_LINE_SIZE環境変数で、 変更することができます。

"Maximum message size exceeded."のエラーは何を意味していますか

アプリケーションをとても大きなリクエストとレスポンスから 守るために、HTTPパーサーは、自動的に新しいデータを受け付けるのを停止する 上限を設けており、ほとんどの場合接続を切断します。 この制限はデフォルトで10MBで、MOJO_MAX_MESSAGE_SIZE 環境変数でこの値を変更することができます。

"Maximum buffer size exceeded"のエラーは何を意味していますか

この保護のメカニズムは前のふたつの答えとよく似ています。 HTTPパーサーは、チャンク化、圧縮、マルチパートメッセージを解析しますが、 どれくらいの量のコンテンツをバッファリングするかの制限です。 この制限はデフォルトでは256KBですが、MOJO_MAX_BUFFER_SIZE環境変数 を使って変更することができます。

"Your secret passphrase needs to be changed!!!"は何を意味していますか

Mojoliciousは暗号化クッキーのようなセキュリティの機能のための秘密のパスフレーズを使用します。 デフォルトではアプリケーション名ですが、これはあまり安全とはいえません。 ですので記憶しておいてもらうために、デフォルトのログメッセージ追加しています。 Mojolicioussecrets属性でこのパスフレーズを変更することができます。

$app->secrets(['My very secret passphrase.']);

"What does "Nothing has been rendered, expecting delayed response"は何を意味していますか

MojoliciousはノンブロッキングI/Oとイベントループの上に構築されるように設計されています。 それで、リクエストが入ってきてすぐにレスポンスが返ってこないときは、 それは意図的なものだと解釈してWebサーバーに応答を返します。 Webサーバーは、タイマーのようなイベントを待っている間に、他のリクエストを処理し、 レスポンスを生成します。

"Inactivity timeout."は何を意味していますか。

アプリケーションをDoS攻撃から守るために、 すべての接続は非アクティブタイムアウトを持っています。 自動的にドロップする前に、どの程度の時間接続が非アクティブでいることができるかを制限 するものです。 デフォルトでは、ユーザーエージェントのために20秒が、すべての組み込みサーバーのために 15秒が設定されています。通常はMojo::Server::Daemoninactivity_timeoutとして言及されます。 このタイムアウトはいつでも適用されるので、 リクエストを処理するために、長い時間が必要となるアプリケーションのために、 微調整する必要があるかもしれません。

"Premature connection close."は何を意味していますか

このエラーメッセージは、上記のひとつに関連して発生します。 ユーザーエージェントが完全なレスポンスを受け取る前に、 Webサーバーが接続を閉じたということを意味しています。 あるいは、ユーザーエージェントが破棄されたということを意味しています。 こうなった場合は、すべてのコネクションが強制的に閉じられます。

"Worker 31842 has no heartbeat, restarting."は何を意味していますか。

Hypnotoadワーカープロセスは、マネージャプロセスに、まだ応答可能かどうかを調べるために 定期的な間隔でハートビートメッセージを送ります。 アプリケーションの無限ループのようなブロッキング操作がこれによって防止され、 影響を受けたワーカーがタイムアウトの後にリスタートされます。 Mojo::Server::Preforkheartbeat_timeoutのデフォルトは20秒で アプリケーションが必要とすれば、増加させることができます。

What does "Transaction already destroyed" mean?

基礎となる接続が、接続時間経過で、閉じられ、"tx" in Mojolicious::Controllerがもはや利用可能でないため、 このエラーメッセージは通常、ノンブロッキング操作の結果を長く待った後に表示されます。 接続が閉じられないよう回避する方法はないですが、このエラーメッセージをトランザクションのリファレンスを 弱参照しないで、維持することによって避けるようにすることができます。

# トランザクションオブジェクトへの強い参照を保持する
my $tx = $c->render_later->tx;
$c->ua->get_p('https://mojolicious.org')->then(sub {
  $c->render(text => 'Visited mojolicious.org');
})->catch(sub {
  my $err = shift;
  $tx;
  $c->reply->exception($err);
});

より学ぶには

Mojolicious::Guidesを学び続けてください。またMojolicious wikiを見ることもできます。wikiには多くのユーザーによる多くのドキュメントやサンプルがあります。

サポート

ドキュメントに答えが見つからなくって質問があるときは、 メーリングリストか 公式のIRCチャンネルであるirc.perl.orgの#mojoでためらわずに質問してください。

(Mojolicious 8.12を反映)

関連情報