Я продолжаю получать 503 ошибки через 30 секунд после того, как клиент отправит сообщение через faye. Через 30 секунд клиент получает сообщение, и он добавляется в чат, но ошибка все еще происходит, и сокет в конце концов будет закрыт. Как я могу изменить свой существующий код, чтобы сохранить сетевой ресурс? И как я могу избавиться от 30-секундной задержки, которую бросает герою, когда отправляется сообщение?Faye Сообщения на Heroku
сообщений/add.js.erb
<% broadcast @path do %>
var $chat = $("#chat<%= @conversation.id %>");
$chat.append("<%= j render(@message) %>");
//Set the scroll bar to the bottom of the chat box
var messageBox = document.getElementById('chat<%= @conversation.id %>');
messageBox.scrollTop = messageBox.scrollHeight;
<% end %>
$("#convoId<%[email protected]%>")[0].reset();
application_helper.rb
def broadcast(channel, &block)
message = {:channel => channel, :data => capture(&block), :ext => {:auth_token => FAYE_TOKEN}}
uri = URI.parse(FAYE_END_PT)
Net::HTTP.post_form(uri, :message => message.to_json)
end
application.rb
config.middleware.delete Rack::Lock
config.middleware.use FayeRails::Middleware, mount: '/faye', :timeout => 25
faye.ru
require 'faye'
require File.expand_path('../faye_token.rb', __FILE__)
class ServerAuth
def incoming(message, callback)
if message['channel'] !~ %r{^/meta/}
if message['ext']['auth_token'] != FAYE_TOKEN
message['error'] = 'Invalid authentication token'
end
end
callback.call(message)
end
end
Faye::WebSocket.load_adapter('thin')
faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45)
faye_server.add_extension(ServerAuth.new)
run faye_server
PROCFILE
web: bundle exec rails server -p $PORT
worker: bundle exec foreman start -f Procfile.workers
Procile.workers
faye_worker: rackup middlewares/faye.ru -s thin -E production
503 Ошибка
/messages/add Failed to load resource: the server responded with a status of 503 (Service Unavailable)
Я попытался добавить работника к героку вместе с веб-дино, не повезло. Все работает нормально на моем локальном хосте при запуске heroku local
. Процесс на местном взгляд хозяина, как
forego | starting web.1 on port 5000
forego | starting worker.1 on port 5100
worker.1 | 20:33:18 faye_worker.1 | started with pid 16534
где, как даже с веб-дино и работника на Heroku
=== web (1X): bundle exec rails server -p $PORT
web.1: up 2015/12/28 20:08:02 (~ 1h ago)
=== worker (1X): bundle exec foreman start -f Procfile.workers
worker.1: up 2015/12/28 21:18:39 (~ 40s ago)
Много этого кода был взят из различных учебных пособий так что надеюсь, если мы сможем решить эту проблему вопрос будет делать с помощью Faye с Heroku легче кому-то другому. Благодаря!