2016-12-05 19 views
6

Tôi đang sử dụng ActionCable với Rails trên Heroku.Heroku Websocket to Custom Domain

Trò chuyện hoạt động hoàn hảo khi tôi ở example.herokuapp.com NHƯNG nó phá vỡ trên tên miền tùy chỉnh của tôi (example.com) vì tôi KHÔNG phát hành cookie từ máy chủ của ổ cắm web (wss: //example.heroku .com/cable).

Có cách nào để trỏ wss: //example.herokuapp.com/cable TO wss: //example.com/cable trên Heroku?

Ngoài ra, bạn sẽ giải thích cách sử dụng khả năng websocket của cloudflare để giải quyết vấn đề này?

Cảm ơn bạn rất nhiều.

+0

bạn đã tìm thấy một giải pháp cho điều này? Tôi đang gặp vấn đề tương tự – gwalshington

Trả lời

0

Khi làm việc với websocket tôi thực sự thích làm việc với pusher. Họ là bữa ăn tối đơn giản để thiết lập. họ được tự do cho 200k Tin nhắn/ngày

Đây là heroku documentation cho pusher

1) cài đặt các viên ngọc

gem install pusher 

2) cài đặt addons

heroku addons:create pusher:sandbox 

3) đặt trình khởi tạo của bạn

#config/initializers/pusher.rb 
require 'pusher' 

Pusher.app_id = '000000' 
Pusher.key = '000000000000000000' 
Pusher.secret = '00000000000000000000' 
Pusher.cluster = 'xxx' 
Pusher.logger = Rails.logger 
Pusher.encrypted = true 

Một khi bạn có chìa khóa của bạn ở vị trí tất cả các bạn cần là để tạo ra một khách hàng (js) và một máy chủ

mã kiểm tra vào khách hàng là như thế này

<!DOCTYPE html> 
<head> 
    <title>Pusher Test</title> 
    <script src="https://js.pusher.com/4.1/pusher.min.js"></script> 
    <script> 

    // Enable pusher logging - don't include this in production 
    Pusher.logToConsole = true; 

    var pusher = new Pusher("#{key}", { 
     cluster: "#{cluster}", 
     encrypted: true 
    }); 

    var channel = pusher.subscribe('my-channel'); 
    channel.bind('my-event', function(data) { 
     alert(data.message); 
    }); 
    </script> 
</head> 

bây giờ trên máy chủ thực sự là đơn giản

require 'pusher' 

pusher_client = Pusher::Client.new(
    app_id: ENV[:app_id], 
    key: ENV[:key], 
    secret: ENV[:secret], 
    cluster: ENV[:cluster], 
    encrypted: true 
) 

pusher_client.trigger('my-channel', 'my-event', { 
    message: 'hello world' 
}) 

tôi hy vọng rằng điều này sẽ giúp ra