Rails 빠른 팁 #6: tmux, tmuxinator 및 Overmind

7647 단어 tipsrailsruby
오늘의 Rails 빠른 팁에서는 로컬 개발 워크플로우, 특히 tmux , Overmindtmuxinator 을 살펴보겠습니다.

tmux


tmux는 "터미널 멀티플렉서"라고 하는 것입니다. documentation 은 이것이 정확히 무엇을 의미하는지 다음과 같이 설명합니다.

It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.



다음 스크린샷은 3개의 창이 있는 단일 tmux 창을 보여줍니다. 하나는 figlet을 통해 인사말을 표시하고 다른 하나는 실행 중hugo serve 및 이 블로그 게시물을 편집하기 위한 세션Neovim입니다.



이것은 이미 꽤 멋지지만 tmux는 iTerm's tmux integration 과 함께 사용하면 정말 빛납니다.



강조 표시된 두 설정은
  • 각 tmux 창이 첨부 창에서 별도의 탭이 되고
  • 연결 탭이 세션이 끝날 때까지 "매립"(숨김)됩니다.

  • 오버마인드



    Overmind은 tmux를 활용하는 Procfile 기반 응용 프로그램의 프로세스 관리자입니다. 이는 Foreman에 비해 몇 가지 장점이 있습니다.
  • 프로세스가 tmux 세션 내에서 실행되므로 특정 세션에 쉽게 연결할 수 있습니다. overmind connect web . 이는 Foreman에서 특히 잘 작동하지 않는 binding.pry 또는 binding.irb 세션과 상호 작용할 때 특히 유용합니다.
  • 같은 맥락에서 개별 프로세스를 쉽게 시작, 중지 및 다시 시작할 수 있습니다. overmind stop sidekiq 또는 overmind restart web .
  • iTerm의 tmux 통합과 마찬가지로 Overmind는 tmux의 control mode을 사용하므로 출력이 잘리거나 수정되지 않습니다.

  • tmuxinator


    tmuxinator는 tmux 세션을 만들고 관리하기 위한 도구입니다. 다음은 DEV 코드베이스 작업을 위한 구성 파일입니다.

    name: dev
    root: ~/src/dev.to
    
    # Project hooks
    # Runs on project start, always
    on_project_start: >
      pg_ctl -D /usr/local/var/postgres start;
      redis-server --daemonize yes ;
      brew services start elasticsearch-oss
    # Run on project exit ( detaching from tmux session )
    on_project_exit: tmux -CC attach
    # Run on project stop
    on_project_stop: >
      overmind quit;
      pg_ctl -D /usr/local/var/postgres stop;
      redis-cli shutdown;
      brew services stop elasticsearch-oss
    
    # Specifies (by name or index) which window will be selected on project startup.
    # If not set, the first window is used.
    startup_window: shell
    
    # Controls whether the tmux session should be attached to automatically.
    # Defaults to true.
    attach: false
    
    windows:
      - server: >
          bundle install &&
          yarn &&
          rails db:migrate &&
          rails data_updates:run &&
          overmind start -f Procfile.dev
      - logs: tail -f log/development.log
      - shell:
    


    좀 더 자세히 살펴보겠습니다.

    root: ~/src/dev.to
    


    이렇게 하면 세션의 루트 디렉터리가 설정되므로 각각의 새 창이 여기에서 시작됩니다.

    on_project_start: >
      pg_ctl -D /usr/local/var/postgres start;
      redis-server --daemonize yes ;
      brew services start elasticsearch-oss
    


    이 tmux 세션을 시작할 때마다 위의 내용이 필요한 모든 서비스를 불러옵니다. 프로젝트에 따라 Nix , Homebrew 및 수동으로 설치된 도구의 조합을 사용하므로 이것이 잘 작동합니다.

    windows:
      - server: >
          bundle install &&
          yarn &&
          rails db:migrate &&
          rails data_updates:run &&
          overmind start -f Procfile.dev
      - logs: tail -f log/development.log
      - shell:
    


    이 섹션은 각각의 새 세션이 시작될 세 개의 창을 정의합니다. 먼저 필요한 설정 작업을 실행한 다음 Overmind를 사용하여 응용 프로그램을 불러옵니다. 두 번째 창은 개발 로그를 뒤덮고 마지막 창은 루트 디렉터리에서 셸을 엽니다.

    attach: false
    on_project_exit: tmux -CC attach
    


    이 두 가지 옵션은 tmux 세션이 앞에서 언급한 iTerm 통합과 원활하게 작동하도록 합니다. 완료될 때 세션에 자동으로 연결하지 않고 에코가 비활성화된 제어 모드에서 연결합니다( -CC ).

    on_project_stop: >
      overmind quit;
      pg_ctl -D /usr/local/var/postgres stop;
      redis-cli shutdown;
      brew services stop elasticsearch-oss
    


    이렇게 하면 세션을 종료할 때 모든 프로세스와 서비스가 중지됩니다. iTerm 통합으로 인해 모든 관련 탭이 닫히고 제어 세션이 다시 나타납니다.

    내 설정이 작동하는 방식은 다음과 같습니다.



    요약



    tmux, Overmind 및 tmuxinator의 조합은 기능이 풍부하고 강력하며 유연한 로컬 개발 경험을 제공합니다. 이 워크플로에 관심이 있다면 모든 도구를 (한 번에) 조정할 필요가 없다는 점을 염두에 두고 실험하고 자신에게 맞는 것을 유지하십시오.

    좋은 웹페이지 즐겨찾기