커스텀 Ruby 스크립트 실행

rails 콘솔을 사용하면 원하는 작업을 수행할 수 있습니다. 그러나 이러한 작업은 주기적으로 실행되어야 하며, rails 콘솔에 명령어를 하나씩 입력하는 것은 원치 않습니다. 자가 호스팅한 Discourse 인스턴스에서 Ruby 스크립트를 실행하는 방법은 무엇인가요?

또한, 스크립트는 CSV 파일을 읽게 되는데, 이 CSV 파일을 어디에 두어야 Docker 컨테이너 내에서 여전히 접근할 수 있으면서도 업데이트 후에도 사라지지 않을까요?

한 가지 접근 방식은 파일을 업로드한 후 그 URL을 설정에 저장하는 것입니다. 파일을 업로드하면 삭제되는 것을 방지할 수 있습니다.

플러그인에서 작업(job)을 실행할 수 있습니다. Discourse와 Pavilion 플러그인에는 작업에 대한 수많은 예제가 있습니다.

제 사용 사례가 처음 설명한 것보다 더 단순한 건 아닌지 궁금합니다. 보통 저는 다음처럼 합니다:

./launcher enter app
rails c
> u= User.find(1)
> some more code here

제가 원하는 것은 다음과 같습니다:

./launcher enter app
./my_code.rb

여기서 my_code.rb에는 이전에 rails 콘솔에서 실행했던 내용을 담고 있습니다.

당신은 “작업이 주기적으로 실행되기를” 원한다고 말씀하셨습니다.

만약 그것이 “커뮤니티의 수명 동안” 계속되어야 한다면, 이를 위해 자체 플러그인을 작성하는 것이 가치가 있습니다. 레일스 콘솔에 직접 들어가는 것(지저분하고 더 위험하니까요!)보다 훨씬 어렵지 않습니다.

또한 코드를 저장하고 적절하게 관리하며, 시간이 지나면서 점진적으로 개선할 수 있게 해줍니다.

대안으로 레이크(rake) 작업을 정의할 수도 있지만, 이를 어딘가에 저장해야 하며, 잠재적으로 이 역시 플러그인 내에 저장해야 할 수 있습니다!

네, 표현을 잘못 선택했습니다. 제가 의도한 것은 다음과 같습니다: 이 커뮤니티의 수명 동안 이 작업을 여러 번 실행해야 합니다. 하지만 고정된 주기는 없으며, 실행 시점은 외부 이벤트에 의해 결정됩니다. 따라서 저는 정해진 시간 간격 없이 제 스스로 작업을 여러 번 실행할 것입니다.

따라서 rake 태스크가 바로 그 해결책이 될 수 있습니다. rake는 애드 혹(Ad hoc) 스크립트 실행을 위해 고안된 도구입니다. 그래도 플러그인으로 만들어두는 것이 좋습니다. 이렇게 하면 GitHub에서 깔끔하게 관리할 수 있고, 어디에 두었는지 잊어버리거나 실수로 삭제하는 일도 없으니까요.

여기 예시들이 있습니다: discourse/lib/tasks at 1472e47aae5bfdfb6fd9abfe89beb186c751f514 · discourse/discourse · GitHub

rake task로 만들거나, /sidekiq에서 수동으로 시작해야 하는 job으로 만들 수도 있습니다.

UX에서 CSV를 업로드하고 제안된 대로 설정값으로 전달하거나, CSV를 특정 토픽에 업로드한 뒤 스크립트에서 해당 토픽의 최신 게시물/업로드 파일을 가져오도록 하거나, /var/discourse/shared/standalone/xxx.csv에 업로드한 뒤 스크립트에서 /shared/xxx.csv로 접근하는 방법도 있습니다. 아니면 CSV 파일을 업로드하는 대신 API를 활용해 전체 작업을 처리하는 것이 더 나을 수도 있습니다.

무엇을 시도하고 있는지 설명하지 않고, 최적의 해결책이 아닐 수도 있는 해결책만 제시하고 있습니다.