ライブチャットの例を使用して、最近、ActionCableをRuby on Railsプロジェクトに統合する方法に関する短いメモを公開したいと思います。
ActionCableの仕組みについては
詳しく説明しませんが、使用例を
簡単に紹介します。
準備する
まず、Gemfileにactioncableとpumaを追加し
ます 。
gem 'actioncable', github: 'rails/actioncable' gem 'puma'
ActionCableは、メインアプリケーションプロセスとは別に起動されます。 したがって、
PumaマルチスレッドWebサーバーを使用します。
建築家チャット
メインページで、ユーザーはニックネームを入力します。その後、Cookieにニックネームを書き込み、チャットページで編集します。
config / routes.rbにいくつかのルートを追加し
ます 。
resources :messages, only: [:index, :create] resources :sessions, only: [:new, :create]
アクションコントローラーを作成します。 クッキーのニックネーム:
ユーザー認証フォームアプリ/ビュー/セッション/ new.html.slim:
= form_for :session, url: sessions_path do |f| p = f.label :username, ' ' p = f.text_field :username p = f.submit ''
チャット自体では、印刷されたメッセージへの応答として200を送信します。
ビューアプリ/ビュー/メッセージ/index.html.slim:
p = cookies.signed[:username] p
メッセージはAJAXによってサーバーに送信されます。
ActionCalbeを構成する
ActionCableとの統合を担当する3つのクラスを作成しましょう。
作成したディレクトリを
autoload_pathsに追加することを忘れないでください。 これで、
MessagesChannelチャネルにサブスクライブしている全員が、
サブスクライブされたメソッドで定義された対応するストリームでメッセージを受信できるようになります。 -
メッセージ 。
ActionCableはRedisを介したメッセージングを提供します。 すでにインストールされていると仮定します。
config / redis / cable.ymlでそれとの通信を設定する必要があります:
development: &dev :url: redis://localhost:6379 :host: localhost :port: 6379 :timeout: 1 :inline: true test: *dev production: *dev
Pumaを構成します。
ポート34523でプーマを起動します。
これで、クーガーは
./bin/cableコマンドによって起動されます。
一般的なチャットにメッセージを送信する
app / controllers / messages_controller.rbを少し調整しましょう:
class MessagesController < ApplicationController def create ActionCable.server.broadcast 'messages', message: params[:message][:body], username: cookies.signed[:username] head :ok end end
最も重要なことは、チャンネル登録です。 2つの
コーヒーファイルを作成してみましょう(忘れずに再取得してください):
以上です。
いつものように、小さなプロジェクト
-https://github.com/lon10/live-chat