07/09/2018, 15:36

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 serverreload 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

Minh hoạ

alt text

0