デバッグ目的で、実行時にrakuモジュールをリロードする方法は?


8

楽休/ APIアプリケーションでモジュールを動的にロードしています。

モジュールに変更を加えるたびにサーバーが再起動しないようにしたいと思います。

requireを呼び出すたびにrakuモジュールをリロードする方法はありますか?

try require ::('Foo');

回答:


6

Croこれを行います。サーバーをCroの上に構築できます。それが私がお勧めすることです。または、Croコードを調べて、自動再起動の処理方法を学ぶこともできます。Cro :: Tools :: Runnerは、出発点として適切な方法です。


4

ロードする前にすべてのモジュールがプリコンパイルされることを考慮する必要があります。ロードしているのはソースではなく、ソースから生成されたCompUnitです。デフォルトでは、.precompディレクトリにあります。たとえば、このプリコンパイルはバージョンも処理しますが、主なことは、ソースではなくバイトコードであることです。

その機械を手に取る(つまり、ソースに変更があるかどうかを確認し、それをプリコンパイルし、プリコンパイルされたバイナリをどこにでもロードして実行する)以外は、簡単な回避策はありません。場合は、これのユースケースがあるかどうかを自問することをお勧めします。多分あなたがする必要があるのは、多分サーバーの再起動を高速化すること、多分日本酒を使用した自動化、またはサーバーを再起動する必要なしにgitフックから統合テストを実行することです


3

プロセスでモジュールをリロードすることはできません。モジュールIDが検索されると、キャッシュされ、そのIDを2回目に検索すると、最初に一致したCompUnitが引き続き使用されます。プリコンパイルはこれには関係ありません。

見る:

https://github.com/rakudo/rakudo/blob/0b8ede6c459be752adef9cbbf7b59c961d9df0b0/src/core.c/CompUnit/Repository/Installation.pm6#L445-L453

https://github.com/rakudo/rakudo/blob/0b8ede6c459be752adef9cbbf7b59c961d9df0b0/src/core.c/CompUnit/Repository/FileSystem.pm6#L13-L21

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.