Actioncable, Rails 5 ile gelmiş, WebSocket kullanımını sağlayan/kolaylaştıran  bir kütüphane. Oldukça fazla güzellikleri olmasına rağmen onları burada yazmayacağız, yazının konusu nasıl kullanırız. Örneklerle açıklayalım.

Halihazırda rails 5 ve üzeri bir uygulamaya sahip olduğunuzu varsayarak öncelikle redis gemini Gemfile’a eklemenizi öneriyorum. Zira ben varsayılan gelen ayarlarda haberleşme sıkıntı yaşadım.

Bu satırı dahil ettikten sonra bundle install diyelim. Burada 3.3 versiyonu spesifik seçmemizin sebebi 4 versiyonu ile Rails 5.1.2 arasında sıkıntılar olduğu. Yine bi’ deneyin, siz bu yazıyı okurken o sorunlar çözülmüş olabilir 🙂

Şimdi de cable.yml yapılandıralım. Sizdeki ayarlarda development adapter:async olacaktır. Aşağıdaki şekilde güncelleyin

Daha sonra routes.rb dosyasına actioncable server’ı mount edelim.

Bu adımdan sonra assets/javascripts/application.js dosyasında aşağıdaki satırın olduğundan emin olunuz.

ve rails projesinin oluşturulması ile birlikte oluşturulan assets/javascripts/cable.js içeriği şu şekilde olmalı.

Artık rails s ile serveri çalıştırıp localhost:3000 adresine tarayıcıdan girdiğinizde tarayıcı console’una App.cable yazınca aşağıdaki çıktıyı alıyorsanız her şey sorunsuz bir şekilde ilerliyor demektir.

Şimdi bir duyuru kanalı oluşturalım: rails g channel announcement ile birlikte şu iki dosya oluşturulacak:

  1. app/channels/announcement_channel.rb
  2. app/assets/javascripts/channels/announcement.js

ilk dosyamızı aşağıdaki gibi güncelleyelim.

Şimdi ikinci dosyamızı inceleyecek olursak;

Burada üç method var.

  1. connected: kanal ile ilk bağlantı oluştuğunda çalışır.
  2. disconnected: kanal ile bağlantı kesildiğinde çalışır.
  3. received: kanala bir veri geldiğinde çalışır.

Bir test yapmak için bu javascript dosyamızı aşağıdaki şekilde güncelleyelim.

Şimdi rails c ile rails konsolu açıp kanala bir yayın gönderelim:

Bu kodu çalıştırdıktan sonra 1 değeri return etmiş olması gerek. Tarayıcınızın console’a bakarsanız {veri: “test”} şeklinde bir çıktı göreceksiniz.

Gelelim production ayarlarına. Nginx yapılandırmasını şurada görebilirsiniz. Yapmamız gereken üç şey var.

  1. cable.yml production ayarlarını yapılandır.
  2. websocket bağlantısı için izin verilen url
  3. nginx yapılandır

     

Evet bu kadar. Artık kolayca anlık mesajlaşma uygulaması, site içi bildirim, realtime dashboard gibi şeyler yapabilirsiniz.