Basit bir gerçek zamanlı sohbet yazıyorum, bu yüzden web-soketleri kullanmaya karar verdim. gem 'faye-rails'
kullandım. Web konsolu, POST http://khersonchat.herokuapp.com/faye [HTTP/1.1 200 OK 170ms]
çalışır, ancak bir ileti gönderdiğimde bir hata olduğunu gösterir: While loading the page connection ws://khersonchat.herokuapp.com/faye was broken
(Rusça'dan çevrilmiş ). Bu yüzden bir mesaj gönderdiğimde, sayfanın tamamı yeniden yükleniyor ve diğer kişilerin mesajlarını görmek için bir sayfayı yeniden yüklemem gerekiyor.Faye düzgün çalışmıyor
messages_controller.rb
:
def create
respond_to do |format|
if current_user
@message = current_user.messages.build(message_params)
if @message.save
flash[:success] = 'Message sent'
else
flash[:error] = 'Oops, an error :('
end
format.html {redirect_to root_path}
format.js
else
format.html {redirect_to root_path}
format.js {render nothing: true}
end
end
end
application.js
:
//= require jquery
//= require jquery_ujs
//= require faye
//= require messages
//= require_self
//= require turbolinks
messages.coffee
:
window.client = new Faye.Client('/faye')
jQuery ->
$('#new_message').submit ->
$(this).find("input[type='submit']").val('Sending...').prop('disabled', true)
try
client.unsubscribe('/messages')
catch
console?.log "Can't unsubscribe"
client.subscribe '/messages', (payload) ->
$('#messages').find('.media-list').append(payload.message) if payload.message
create.js.erb
publisher = client.publish('/messages', {
message: '<%= j render @message %>'
});
publisher.callback(function() {
$("#message_body").val('');
$("#new_message").find("input[type='submit']").val('Send').prop('disabled', false)
});
publisher.errback(function() {
alert('Oops, an error');
});
https://github.com/AlexNikolaev94/chatclone.git - yukarı güncel kaynak kodu
önemli! sohbet bir sosyal ağ Vkontakte (vk.com) kullanarak, omniauth
aracılığıyla doğrular, böylece Git saklanan sürüm localhost'a erişimi olan
Görünüşe göre Faye sadece mesajların yayınlanmasına izin vermiyor, ve konuyla ilgili hiç bir fikrim yok: (her şeyi iki kere kontrol ettim, ama sadece işe yaramıyor) – AlexNikolaev94