2017-01-25 18 views
6

Próbowałem wszystkiego, co mogę znaleźć w Internecie, i nic nie działa. Mając nadzieję, że niektóre świeże oczy zobaczą problem. Po raz pierwszy używam ActionCable i wszystko działa świetnie lokalnie, ale kiedy pcham do heroku. moje dzienniki nie wykazują żadnych actioncable subskrypcje jak mój serwer dev:kabel akcji subskrybujący lokalnie, ale nie na heroku

[ActionCable] [[email protected]] MsgsChannel is streaming from msg_channel_34 

i podczas wysyłania wiadomości, ja widzę [ActionCable] Broadcasting to msg_channel_34: ale nie są one dołączanie, który Zgaduję oznacza, że ​​metoda received nie jest dostępny /nazywa?

Zauważam na logach heroku, że mówi Listening on tcp://0.0.0.0:5000, gdzie jako dev to słuchanie na localhost: 3000. Czy powinienem w jakiś sposób zwracać uwagę na moją aplikację heroku?

Oto odpowiednie pliki konfiguracyjne:

Procfile:

web: bundle exec puma -p 5000 ./config.ru 
actioncable: bundle exec puma -p 28080 cable/config.ru 
redis: redis-server 

*** Dzięki poniższym komentarzu, ja również próbować. Nadal nie działa, ale widzę, że port, którego słucha się zmienia, sprawia, że ​​wierzę, że ma coś wspólnego z konfiguracją? :

web: bundle exec puma -p $PORT ./config.ru 
actioncable: bundle exec puma -p $PORT cable/config.ru 
redis: redis-server 

/cable/config.ru

require ::File.expand_path('../../config/environment', __FILE__) 
Rails.application.eager_load! 

ActionCable.server.config.allowed_request_origins = ["http://localhost:3000"] 
run ActionCable.server 

konfiguracji/Środowiska/development.rb

config.action_cable.allowed_request_origins = ['localhost:3000'] 
config.action_cable.url = "ws://localhost:3000/cable" 

konfiguracji/Środowiska/production.rb

config.web_socket_server_url = "wss://app-name.herokuapp.com/cable" 
    config.action_cable.allowed_request_origins = ['https://app-name.herokuapp.com', 'http://app-name.herokuapp.com'] 

konfiguracji /cable.yml

local: &local 
    adapter: async 
    :url: redis://localhost:6379 
    :host: localhost 
    :port: 6379 
    :timeout: 1 
    :inline: true 
development: *local 
test: *local 


production: 
    :url: redis:<%= ENV["REDISTOGO_URL"] %> 
    adapter: redis 

<%= ENV["REDISTOGO_URL"] %> jest ustawiony, potwierdzone przez uruchomienie Heroku config

routes.rb

mount ActionCable.server => '/cable' 

Dlaczego to działa na dev, ale nie na Heroku? Czytam od wielu godzin, ale nie mogę tego rozgryźć. Dziękuję Ci!!

UPDATE: kłody Heroku:

2017-01-25T20:32:57.329656+00:00 heroku[web.1]: Starting process with command `bundle exec puma -p 5000 ./config.ru` 
2017-01-25T20:32:59.600554+00:00 app[web.1]: Puma starting in single mode... 
2017-01-25T20:32:59.600574+00:00 app[web.1]: * Version 3.6.2 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity 
2017-01-25T20:32:59.600575+00:00 app[web.1]: * Min threads: 0, max threads: 16 
2017-01-25T20:32:59.600577+00:00 app[web.1]: * Environment: production 
2017-01-25T20:33:02.375128+00:00 app[web.1]: profile controller 
2017-01-25T20:33:02.588653+00:00 app[web.1]: Use Ctrl-C to stop 
2017-01-25T20:33:02.588446+00:00 app[web.1]: * Listening on tcp://0.0.0.0:5000 
2017-01-25T20:33:17.681469+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 
2017-01-25T20:33:17.681469+00:00 heroku[web.1]: Stopping process with SIGKILL 
2017-01-25T20:33:17.862118+00:00 heroku[web.1]: Process exited with status 137 
2017-01-25T20:33:57.501746+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch 
2017-01-25T20:33:57.501908+00:00 heroku[web.1]: Stopping process with SIGKILL 
2017-01-25T20:33:57.630071+00:00 heroku[web.1]: Process exited with status 137 
2017-01-25T20:33:57.642753+00:00 heroku[web.1]: State changed from starting to crashed 
+0

Znaleźliście jeszcze rozwiązanie? –

+0

@Codingactive yes - Wysłałem rozwiązanie poniżej – gwalshington

Odpowiedz

6

Problemem był mój host, to aplikacja heroku, ale żądania pochodziły z domeny niestandardowej.

Aby rozwiązać:

heroku config:set RAILS_HOST "http://www.example.com"

a potem w production.rb:

config.action_cable.url = "wss://#{ENV['RAILS_HOST']}/cable"

2

Twój procfile sugeruje uruchomić puma z kablem/cable.ru na porcie 28080. Również - kabel pliku/config.ru nie powinien zawierać linię:

ActionCable.server.config.allowed_request_origins = ["http://localhost:3000"] 

już skonfigurowane w ten config/środowiska/*. rb

+0

Usunąłem powyższą linię i nadal jest taka sama. Dostałem port 28080 w moim Procfile, z samouczka - czy powinien powiedzieć coś jeszcze poza 'actioncable: bundle exec puma -p 28080 cable/config.ru'? Dodałem moje logi heroku, przytyć, które pomaga. dzięki! :) – gwalshington

1

Czy Twoja nazwa aplikacji dosłownie app-name? Podejrzewam, że nie. Szanse są całkiem dobre, że te wartości ...

config.web_socket_server_url = "wss://app-name.herokuapp.com/cable" 
config.action_cable.allowed_request_origins = ['https://app-name.herokuapp.com', 'http://app-name.herokuapp.com'] 

Należy zaktualizować, aby korzystać z rzeczywistego publicznego adresu URL, z którym chcesz się połączyć.

+0

Ah tak, właśnie to napisałem dla celów zamieszczania na SO :) – gwalshington

Powiązane problemy