Tìm hiểu cách hoạt động reloading code của Lotus Framework
Như các bài trước mình đã từng viết thì khi khởi tạo xong 1 app thì việc run server và reload code được thực hiện qua lệnh này : lotus server Lotus không tự thực hiện việc reloading code mà sử dụng một gem là Shotgun để giúp thực hiện việc này. Sau đây mình sẽ phân tích về cách hoạt ...
Như các bài trước mình đã từng viết thì khi khởi tạo xong 1 app thì việc run server và reload code được thực hiện qua lệnh này : lotus server
Lotus không tự thực hiện việc reloading code mà sử dụng một gem là Shotgun để giúp thực hiện việc này.
Sau đây mình sẽ phân tích về cách hoạt động của Shotgun và cách mà Lotus sử dụng
Shotgun như thế nào:
Cách hoạt động của Shotgun
Shotgun::Loader.new(@_env.rackup.to_s)
Shotgun sẽ thay rack nhận 1 request
Khi có 1 request gửi đến thì Shotgun::Loader#call sẽ được gọi
-
IO.pipe là resource code lúc này:
- @reader sẽ là read_io —> thể hiện sự thay đổi của process
- @writer sẽ là write_io —> lắng nghe thay đổi của process
Lần đầu nhận được request thì main process sẽ là parent process.
Những lần tiếp theo thì main process sẽ là child process. (n sẽ là parent process của n+1)
Cách mà Lotus sử dụng Shotgun
- Default ta có code_reloading có gá trị là true
Khi đó nó sẽ thực thi đoạn code sau để yêu cầu shotgun thực hiện công việc reload của shotgun
if code_reloading? require 'shotgun' @app = Shotgun::Loader.new(@_env.rackup.to_s) end