Action Cableの理解: AnyCableの試用

外観

ローカルPCのdevelopent 環境で、AnyCableを動かしてみました。
※production環境で動かしてインフラコストの削減やリアルタイム性の向上を図るというのが本来の使い方になります。

環境

macOS 10.15.4
Ruby 2.7.1
Rails 6.0.3
Yarn 1.22.4
Node 13.12.0
anycable-rails 0.6.5
redis 6.0.3
anycable-go 0.6.5

リポジトリ

https://github.com/usutani/try_ac_examples/tree/anycable-rails-local-dev

AnyCableとは

Architecture - AnyCable Docs
Getting Started with Rails - AnyCable Docs

手順

redisとanycable-goのインストール

brew install redis
brew install anycable-go

action_cable_meta_tagの追加

app/views/layouts/application.html.erb

  <head>
    <title>tryacexamples</title>
    <%= action_cable_meta_tag %>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

Gemfile
下記のgemをGemfileに追加します。

gem 'anycable-rails', '~> 0.6.5'
gem 'redis', '~> 4.1'

bundle install

設定ファイル
ローカルPCのdevelopent 環境で動作するように設定ファイルを編集します。

config/cable.yml

development:
  adapter: any_cable

config/environments/development.rb

  # AnyCable
  config.action_cable.url = "ws://localhost:3334/cable"
end

config/anycable.yml

development:
  redis_url: redis://localhost:6379/1

起動
下記のサーバをそれぞれ別のターミナルで起動します。

redis-server /usr/local/etc/redis.conf
bundle exec anycable
anycable-go --host=localhost --port=3334
bundle exec rails server

補足

bundle exec rails serverでサーバを起動すること
ActionController--RoutingError (No route matches [GET] "-cable") · Issue 41
> The issue does not happen again after disabling spring

action_cable_meta_tagの取得
気になったのでコードを見ました。
https://github.com/rails/rails/blob/v6.0.3.1/actioncable/app/javascript/action_cable/index.js#L22-L31

Overmindでの起動
毎回手動で起動するのは面倒ですので、ProcfileとOvermindを使います。
覚書: Overmindに手順をもう少し詳しく書きました。

touch Procfile

redis: redis-server /usr/local/etc/redis.conf
grpc: bundle exec anycable
ws: anycable-go --host=localhost --port=3334
web: bundle exec rails server --port=3000

overmind start

以上です。

この記事が気に入ったらサポートをしてみませんか?