tyoshikawa1106のブログ

- Force.com Developer Blog -

Heroku:WebSockets in Rails 5 with Action Cableを試してみました

HerokuのブログにRails5をつかったデモアプリについての記事が公開されていたのでちょっと試してみました。

Getting Started: Application Architecture

Heroku Buttonも用意されていて自分の環境で簡単に動かすことができるみたいです。
f:id:tyoshikawa1106:20160510135907p:plain


Sign upからユーザを作成後にチャットルームを作成、ルーム毎に投稿するといったアプリを動かすことができました。
f:id:tyoshikawa1106:20160510140336p:plain

Starting a new Rails 5 app with Action Cable

はじめにRubyのバージョンは2.3.0を利用します。
f:id:tyoshikawa1106:20160510140700p:plain


次のコマンドでRails5(Beta版)を利用できるようにします。

$ gem install rails --pre

f:id:tyoshikawa1106:20160510140953p:plain


RedisとPostgresのインストールをしておく必要があるみたいです。

You'll also need to have Postgres and Redis installed in order to build this app. You can brew install redis and brew install postgres if you haven't done so already.


Homebrewで簡単にインストールできるみたいです。試してみたら特に問題なく実行できました。

$ brew install redis
$ brew install postgres


次のコマンドでRailsアプリを作成します。

$ rails new action-cable-example --database=postgresql

f:id:tyoshikawa1106:20160510141432p:plain


Gemfileを編集します。まずRailsのバージョンから。

gem 'rails', '>= 5.0.0.rc1', '< 5.1'
↓
gem 'rails', '>= 5.0.0.beta3', '< 5.1'


続いてRadisです。defaultでコメントアウトされているのですが、次の記述がありました。need to un-comment outということでコメントアウトを解除すればいいのかなと思います。

Redis (which we will need to un-comment out):


多分こう。

# gem 'redis', '~> 3.0'
↓
gem 'redis', '~> 3.0'


Pumaというものもdefaultで記載がありました。一応書き方はブログに合わせておいた方がよさそう。

gem 'puma', '~> 3.0'
↓
gem 'puma'


これでGemfileの編集は環境しました。次のコマンドを実行します。

$ bundle install

Domain Model

モデルの準備です。チャットルーム、メッセージ、ユーザのモデルを用意します。ブログでは省略されていましたが、実際はmigrationファイルを用意して..という手順が必要だと思います。

app/models/chatroom.rb
class Chatroom < ApplicationRecord
  has_many :messages, dependent: :destroy
  has_many :users, through: :messages
  validates :topic, presence: true, uniqueness: true, case_sensitive: false
end
app/models/message.rb
class Message < ApplicationRecord
  belongs_to :chatroom
  belongs_to :user
end
app/models/user.rb
class User < ApplicationRecord
  has_many :messages
  has_many :chatrooms, through: :messages
  validates :username, presence: true, uniqueness: true
end


・・・とここまでやって気づいたのですが、ブログ内で紹介されているのは重要な部分だけで、マイグレーションファイルの作成など細かい手順は省略しているみたいです。


完成版のコードはGitHubで公開されているので、そちらから取得してしまった方が良さそうです。


たぶん次の手順で取得できます。

$ git clone git@github.com:SophieDeBenedetto/action-cable-example.git
$ cd action-cable-example
$ bundle install
$ rake db:create
$ rake db:migrate


rake db:createコマンドを実行したところで、次のエラーが発生しました。
f:id:tyoshikawa1106:20160510145408p:plain


DBの設定がちゃんとできてないよというエラーだと思います。この辺の設定がきちんと理解できてないと進め無さそう。。


ということでちょっと試してみるという感じでは動かせませんでした。ちゃんとRails勉強してから挑戦しようと思います。。