Rails 앱에 Ping 도구 추가
대기 시간은 2단계에서 4단계까지 걸리는 시간입니다.
문제
이 블로그에서는 Rails 앱에 핑/지연 시간 도구를 추가하는 방법을 알아봅니다. 이 도구를 설정한 후 레일 앱의 ping 시간을 모니터링할 수 있습니다. 기본 아이디어는 앱이 얼마나 빨리/느리게 작동하는지 확인하는 것입니다.
해결책
추가를 시작하기 전에 전제 조건이 있습니다.
Rails 버전 => 5로 작동하는 Rails 앱이 있고 webpacker가 추가되었다고 가정해 보겠습니다. 이 핑 도구를 추가하는 방법은 다음과 같습니다.
1-자극 추가
자극을 추가하려면 이 명령을 실행하십시오.
Yarn add stimulus
설치가 완료되면 webpack을 사용하여 애플리케이션으로 가져옵니다.
app/javascript/packs/application.js
에서 이 작업을 수행합니다. javascript 디렉토리에서 controllers 폴더를 생성한 다음 거기에 index.js
를 추가합니다. 그런 다음 application.js
내에서 이 폴더를 참조하십시오. 이것이 귀하의 index.js
모양입니다.import { Application } from "stimulus"
import { definitionsFromContext } from "stimulus/webpack-helpers"
const application = Application.start()
const context = require.context(".", true, /\.js$/)
application.load(definitionsFromContext(context))
2- 터보 레일 및 redis 추가
turbo-rails
를 설정하려면 다음 명령을 사용하십시오.bundle add turbo-rails
rails turbo:install
rails turbo:install:redis
이제 모든 설정이 완료되었으며 사용할 준비가 되었습니다. 다음 명령으로
PingsController
를 생성해 봅시다.rails g controller ping
#pong
로 일반 텍스트 응답을 렌더링하는 PONG
작업을 추가해 보겠습니다.class PingController < ApplicationController
def pong
render status: :ok, body: "PONG"
end
end
다음과 같이
/ping
작업으로 라우팅되는 #pong
끝점을 추가해 보겠습니다.get “/ping”, to: “ping#pong”, as: “ping”
이제
app/views/shared/_ping.html.erb
에서 양식을 만들어 이 패주를 달성해 봅시다.<div data-controller="ping" >
<%= form_tag ping_path, method: :get, data: { action: "turbo:before-fetch-request->ping#pauseRequest turbo:submit-end->ping#measureLatency", "ping-target": "pingForm" } do %>
<%= button_tag "Ping" %>
<% end %>
<span data-ping-target="latency"></span>
</div>
홈페이지를 만들고 이 부분을 추가하여 홈페이지에서 사용할 수 있도록 합시다. 먼저
HomeController
작업으로 show
를 생성해 보겠습니다.rails g controller home show
이제 이 표시 작업을
route.rb
의 루트 작업으로 만듭니다.root to: “home#show”
이제 쇼 페이지에서 양식 부분 렌더링
app/views/home/show.html.erb
에 다음 코드를 추가합니다.<%= render "shared/ping" %>
다음 단계는 지금 대기 시간을 측정하는 것입니다.
이를 위해 자극 컨트롤러를 생성해야 합니다.
rails g stimulus ping
그런 다음 목적을 달성하는 데 필요한 게터와 세터를 정의해 보겠습니다. 대기 시간을 측정하는
measureLatency()
기능이 있습니다. 그런 다음 매초 페이지에 대기 시간을 표시하는 기능displayLatency()
이 있습니다. 이 코드는 모두 아래와 같이 app/javascript/controllers/ping_controller.js
들어갑니다.import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["pingForm", "latency"]
pauseRequest(event) {
event.preventDefault();
setTimeout(() => this.saveRequestTime());
event.detail.resume();
}
saveRequestTime() {
this.requestTime = new Date().getTime();
}
measureLatency() {
this.saveResponseTime();
this.latency = this.responseTime - this.requestTime;
console.log(`${this.latency} ms`);
this.displayLatency()
setTimeout(() => this.ping(), 1000)
}
displayLatency() {
this.latencyTarget.textContent = this.latency + " ms"
}
saveResponseTime() {
this.responseTime = new Date().getTime();
}
ping() {
this.pingFormTarget.requestSubmit()
}
get requestTime() {
return this._requestTime;
}
set requestTime(requestTime) {
this._requestTime = requestTime;
}
get responseTime() {
return this._responseTime;
}
set responseTime(responseTime) {
this._responseTime = responseTime;
}
get latency() {
return this._latency;
}
set latency(latency) {
this._latency = latency;
}
}
양식을 제출하면 이 그림과 같이 1초마다 ping 시간이 인쇄됩니다.
논의
이것이 최종 사용자에게 대기 시간에 대해 알리는 방법입니다. 앱을 확장하고 앱 성능을 개선하기 위해 작업할 때 더 유용합니다. UI를 더 좋게 만들기 위해 그래프도 인쇄할 수 있습니다.
여기에 간단한 Rails ping 앱이 있습니다Repo.
Reference
이 문제에 관하여(Rails 앱에 Ping 도구 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/adeelsarim/adding-ping-tool-in-rails-app-696텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)