我有两个应用程序(一个rails应用程序和一个vue应用程序)需要通过actioncable进行通信。这在开发中非常有效,但是在生产中却不起作用。这两个应用程序都部署在heroku上,rails应用程序使用 RedisCloud
插件。
rails应用程序
## production.rb
config.action_cable.allowed_request_origins = ['https://actioncablevueapp.herokuapp.com']
## cable.yml
development:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: web_chat
test:
adapter: test
production:
adapter: redis
url: <%= ENV.fetch("REDISCLOUD_URL") { "redis://localhost:6379/1" } %>
channel_prefix: web_chat
## chat_channel.rb
class ChatChannel < ApplicationCable::Channel
def subscribed
customer = Customer.find_by(external_id: params[:id])
stream_for customer
end
end
## sidekiq process
ChatChannel.broadcast_to(Customer.find_by(external_id: user_id), body)
vue应用程序
在前端应用程序中,我使用了一个名为actioncable vue的库。这就是它的设置方式
// main.js
Vue.use(ActionCableVue, {
debug: true,
debugLevel: 'error',
connectionUrl: `wss://${process.env.VUE_APP_SERVER_URL.replace('https://', '')}/cable`,
connectImmediately: true,
store
})
// App.vue
export default {
name: 'App',
channels: {
ChatChannel: {
received(data) {
console.log(data)
}
}
},
mounted() {
this.$cable.subscribe({
channel: 'ChatChannel',
id: 'anexistingcustomerid'
})
}
...
}
控制台和我从heroku获得的日志中都没有显示错误。实际上,在heroku上,我确实看到了一条确认订阅的actioncable日志消息。但是,我的vue应用程序无法通过电缆接收任何数据。
你能想到我可能错过的其他配置吗?事实上,这在开发和生产中都很好地工作,不会产生任何错误,这让我有点恼火。
暂无答案!
目前还没有任何答案,快来回答吧!