Rails를 사용한 채팅 소프트웨어 제작
12125 단어 ActionCableRubyRails
개시하다
Rails로 간단한 채팅 앱을 만들었기 때문에 당시 프로그램을 정리했다.
컨디션 $ ruby -v
ruby 2.5.1p57 (2018-03-29 version 63029) [x86_64-darwin19]
$ bin/rails -v
Rails 5.2.3
참고 자료
채팅 소프트웨어를 만들 때 아래 내용을 참고하게 해 주세요.
이 글에 실린 대부분의 원본 코드는 다음과 같은 두 페이지의 내용을 바탕으로 한다.
Action Cable 실시간 채팅 애플리케이션으로 만드는 방법(Rails5.1.4에서) (하나) 허쿠로 이동!
Rails5+Action Cable로 제작!간단한 채팅 소프트웨어(DHH 프레젠테이션 비디오)
소스 코드
채팅 소프트웨어의 소스 코드는 아래에서 확인할 수 있다.
Neufo/rails-sample-app/ChatApp
절차.
1. 앱 만들기
우선 채팅 기능을 설치한 앱을 제작한다.$ rails new ChatApp
2. 컨트롤러 만들기
ChaApp 디렉토리로 이동하여 다음 명령을 실행합니다.$ bin/rails generate controller rooms show
이렇게ChatApp/app/controllers/
하면rooms_controller.rb
만들 수 있어요.
3. 모형 만들기
사용자 입력 메시지를 저장하는 모델을 생성합니다.$ bin/rails generate model message content:text
$ bin/rails db:migrate
4. 메시지 목록 표시
RoomsController의 Show 방법을 사용하여 정보 목록을 가져옵니다.
ChatApp/app/controllers/rooms_controller.rbclass RoomsController < ApplicationController
def show
@messages = Message.all
end
end
가져온 메시지를 표시하려면 View를 편집합니다.1
ChatApp/app/views/rooms/show.html.erb<h1>Chat room</h1>
<div id="messages">
<%= render @messages %>
</div>
페이지에 메시지의 요소를 삽입할 부분 템플릿을 만듭니다.
(ChaApp/app/views/에 메시지 폴더를 만들고 파일을 저장)
ChatApp/app/views/messages/_message.html.erb<div class="message">
<p><%= message.content %></p>
</div>
5. 채널 만들기
클라이언트/서버 간의 통신 처리의 초기 형태를 만듭니다.$ bin/rails generate channel room speak
명령을 실행하면 클라이언트와 서버에 사용할 파일을 만들 것입니다.
$ ruby -v
ruby 2.5.1p57 (2018-03-29 version 63029) [x86_64-darwin19]
$ bin/rails -v
Rails 5.2.3
참고 자료
채팅 소프트웨어를 만들 때 아래 내용을 참고하게 해 주세요.
이 글에 실린 대부분의 원본 코드는 다음과 같은 두 페이지의 내용을 바탕으로 한다.
Action Cable 실시간 채팅 애플리케이션으로 만드는 방법(Rails5.1.4에서) (하나) 허쿠로 이동!
Rails5+Action Cable로 제작!간단한 채팅 소프트웨어(DHH 프레젠테이션 비디오)
소스 코드
채팅 소프트웨어의 소스 코드는 아래에서 확인할 수 있다.
Neufo/rails-sample-app/ChatApp
절차.
1. 앱 만들기
우선 채팅 기능을 설치한 앱을 제작한다.$ rails new ChatApp
2. 컨트롤러 만들기
ChaApp 디렉토리로 이동하여 다음 명령을 실행합니다.$ bin/rails generate controller rooms show
이렇게ChatApp/app/controllers/
하면rooms_controller.rb
만들 수 있어요.
3. 모형 만들기
사용자 입력 메시지를 저장하는 모델을 생성합니다.$ bin/rails generate model message content:text
$ bin/rails db:migrate
4. 메시지 목록 표시
RoomsController의 Show 방법을 사용하여 정보 목록을 가져옵니다.
ChatApp/app/controllers/rooms_controller.rbclass RoomsController < ApplicationController
def show
@messages = Message.all
end
end
가져온 메시지를 표시하려면 View를 편집합니다.1
ChatApp/app/views/rooms/show.html.erb<h1>Chat room</h1>
<div id="messages">
<%= render @messages %>
</div>
페이지에 메시지의 요소를 삽입할 부분 템플릿을 만듭니다.
(ChaApp/app/views/에 메시지 폴더를 만들고 파일을 저장)
ChatApp/app/views/messages/_message.html.erb<div class="message">
<p><%= message.content %></p>
</div>
5. 채널 만들기
클라이언트/서버 간의 통신 처리의 초기 형태를 만듭니다.$ bin/rails generate channel room speak
명령을 실행하면 클라이언트와 서버에 사용할 파일을 만들 것입니다.
채팅 소프트웨어의 소스 코드는 아래에서 확인할 수 있다.
Neufo/rails-sample-app/ChatApp
절차.
1. 앱 만들기
우선 채팅 기능을 설치한 앱을 제작한다.$ rails new ChatApp
2. 컨트롤러 만들기
ChaApp 디렉토리로 이동하여 다음 명령을 실행합니다.$ bin/rails generate controller rooms show
이렇게ChatApp/app/controllers/
하면rooms_controller.rb
만들 수 있어요.
3. 모형 만들기
사용자 입력 메시지를 저장하는 모델을 생성합니다.$ bin/rails generate model message content:text
$ bin/rails db:migrate
4. 메시지 목록 표시
RoomsController의 Show 방법을 사용하여 정보 목록을 가져옵니다.
ChatApp/app/controllers/rooms_controller.rbclass RoomsController < ApplicationController
def show
@messages = Message.all
end
end
가져온 메시지를 표시하려면 View를 편집합니다.1
ChatApp/app/views/rooms/show.html.erb<h1>Chat room</h1>
<div id="messages">
<%= render @messages %>
</div>
페이지에 메시지의 요소를 삽입할 부분 템플릿을 만듭니다.
(ChaApp/app/views/에 메시지 폴더를 만들고 파일을 저장)
ChatApp/app/views/messages/_message.html.erb<div class="message">
<p><%= message.content %></p>
</div>
5. 채널 만들기
클라이언트/서버 간의 통신 처리의 초기 형태를 만듭니다.$ bin/rails generate channel room speak
명령을 실행하면 클라이언트와 서버에 사용할 파일을 만들 것입니다.
$ rails new ChatApp
$ bin/rails generate controller rooms show
$ bin/rails generate model message content:text
$ bin/rails db:migrate
class RoomsController < ApplicationController
def show
@messages = Message.all
end
end
<h1>Chat room</h1>
<div id="messages">
<%= render @messages %>
</div>
<div class="message">
<p><%= message.content %></p>
</div>
$ bin/rails generate channel room speak
$ bin/rails s
브라우저에서 /rooms/show
를 열고 콘솔에 App.room.speak()
를 입력합니다.진짜 답장하면 성공이야.6. jQuery 활성화
고객이 편지를 보내고 받을 때 jQuery를 사용하기 때문에 준비를 해야 합니다.
ChatApp/Gemfile
gem 'jquery-rails'
Gemfile에 이러한 내용을 추가하면 수행bundle update
됩니다.jQuery의 프로그램 라이브러리를 로드합니다.js에 추기하다.
ChatApp/app/assets/javascripts/application.js
(省略)
//= require jquery
//= require jquery_ujs
//= require_tree .
7. 메시징 처리
다음 기능을 만듭니다.
<form>
<label>Say something:</label><br>
<!-- room_speaker からサーバへメッセージを送信する -->
<input type="text" data-behavior="room_speaker">
</form>
ChatApp/app/assets/javascripts/channels/room.coffee$(document).on 'keypress', '[data-behavior~=room_speaker]', (event) ->
# Enterキーが押されたらサーバへメッセージを送信する
if event.keyCode is 13 # return = send
App.room.speak event.target.value
event.target.value = ''
event.preventDefault()
App.room = App.cable.subscriptions.create "RoomChannel",
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
# メッセージ一覧の末尾に受信したメッセージを追加する
$('#messages').append data['message']
speak: (message) ->
# サーバのspeakメソッドを呼び出す
@perform 'speak', message: message
class RoomChannel < ApplicationCable::Channel
def subscribed
# room_channelからデータを受信する
stream_from "room_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def speak(data)
# データベースにクライアントから受信したメッセージを保存する
Message.create! content: data['message']
end
end
메시지를 브로드캐스트할 작업을 정의합니다.$ rails generate job MessageBroadcast
ChatApp/app/jobs/message_broadcast_job.rbclass MessageBroadcastJob < ApplicationJob
queue_as :default
def perform(message)
# room_channelにメッセージをブロードキャストする
ActionCable.server.broadcast 'room_channel', message: render_message(message)
end
private
def render_message(message)
ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message })
end
end
데이터베이스에 메시지를 저장한 후 작업에 로그인합니다.ChatApp/app/models/message.rb
class Message < ApplicationRecord
# データベースにメッセージが保存されたらジョブを登録する
after_create_commit { MessageBroadcastJob.perform_later self }
end
등록된 작업은 자동으로 수행됩니다.Message BroadcastJob의 perform 메서드를 호출하고 모든 클라이언트에 메시지를 보냅니다.
클라이언트는received를 통해 메시지를 받고, 메시지 목록의 끝에 메시지를 추가합니다.
채팅 소프트웨어 제작은 이것으로 끝냅니다.
<%= render @messages %>
생략<%= render partial: "messages/message", collection: @messages %>
.참조: 모음집 렌더링↩Reference
이 문제에 관하여(Rails를 사용한 채팅 소프트웨어 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Nabe847/items/0cd84d9e69cb60ef5d86텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)