Rails5のチャットサンプルをPostgreSQLで動かしてみました

既にRails5で作成されたチャットのサンプルがWebサイトで紹介されていますが、遅ればせながらRadisの代わりに PostgreSQLを利用できるらしいので試してました。

レスポンスの比較は行っていないので、実際に使えるのかどうかわかりませんが、PostgreSQLで代替できるのか確認してみました。

今回のサンプルは弊社のGitHubのサイトで公開しています。

https://github.com/technobrain/actioncable_chat_with_postgresql

PostgreSQL用に変更した点と、そのほか若干躓いた点を紹介いたします。


PostgreSQL用に変更した箇所

config/cable.ymlの変更(開発環境)

development:

  # adapter: async

  adapter: postgresql

  url: postgres://localhost/just_chatting_development

アプリケーション名をjust_chattingで作成しているため、開発用のデータベース名はjust_chatting_developmentとなっています。
ActionCable用のデータベースもRailsのアプリケーションのデータベースで動作するようです。

※追記:2016-04-23 cable.ymlはdevelopment:にadapter:を指定してれば、url:は指定しなくても動作するようです。
追加情報があれば更新したいと思います。


Request origin not allowed エラー対策

WebSocketの通信の際に許可する送信元のIPアドレス(ドメイン名)を指定する必要があるようです。
プロダクション環境(config/environments/production.rb)には指定が記載されているのですが、開発環境には記載がなく・・・

https://github.com/rails/rails/tree/master/actioncable#allowed-request-origins

を参考に、config/environments/development.rbに下記の内容を追加しました。

config.action_cable.disable_request_forgery_protection = true

今回確認した環境

  • Ruby 2.3.0
  • Rails 5.0.0.beta3
  • OS CentOS 7
  • Database PostgreSQL 9.2