【问题标题】:How to setup anycable with docker(ruby on rails)?如何使用 docker(ruby on rails)设置 anycable?
【发布时间】:2021-04-05 23:49:20
【问题描述】:

如何在 docker 上设置 anycable(action cable) 端口?

这是我的 Anycable Dockerfile

来自红宝石:2.6.3-alpine3.10

WORKDIR /home/app

复制。 /home/app/

暴露 50051

CMD ["anycable"]

这是我的 docker-compose

版本:“3” 服务: 应用程序: 建造: 语境: 。 dockerfile: ./dockers/app/Dockerfile 容器名称:out_app 重启:除非停止 卷: - 。:/应用程序 - /app/node_modules - /应用程序/公共/资产 - /应用程序/公共/包 端口: - 3000:3000 D b: 建造: 语境: 。 dockerfile: ./dockers/postgis/Dockerfile 容器名称:out_db 环境: POSTGRES_USER:${DOCKER_DB_USER} POSTGRES_PASSWORD:${DOCKER_DB_PASSWORD} POSTGRES_DB:${DOCKER_DB_NAME} 卷: - /docker_data/giggle/postgres:/var/lib/postgresql/data 端口: - 5435:5432 nginx: 建造: 语境: 。 dockerfile: ./dockers/web/Dockerfile 容器名称:out_web 重启:除非停止 端口: - 80:80 - 443:443 取决于: - 应用程序 卷: - ./dockers/web/nginx.conf:/etc/nginx/conf.d/default.conf - ./data/certbot/conf:/etc/letsencrypt - ./data/certbot/www:/var/www/certbot 证书机器人: 图片:certbot/certbot 重启:除非停止 卷: - ./data/certbot/conf:/etc/letsencrypt - ./data/certbot/www:/var/www/certbot 入口点:“/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'” 雷迪斯: 图片:redis 卷: - ../../tmp/db:/var/lib/redis/data 延迟工作: 建造: 语境: 。 dockerfile: ./dockers/delayed_job/Dockerfile 容器名称:out_delayed_job 命令:bundle exec rails 工作:工作 取决于: - D b 卷: - .:/app

任何电缆:

图像:'anycable/anycable-go:edge-mrb'

端口:

-“3334”

环境:

ANYCABLE_HOST:0.0.0.0

REDIS_URL: redis://redis:6379/1

ANYCABLE_RPC_HOST: 0.0.0.0:3334

ANYCABLE_DEBUG:1

命令:bundle exec anycable

任何电缆: 建造: 语境: 。 dockerfile:./dockers/anycable/Dockerfile 容器名称:anycable 命令:bundle exec anycable 取决于: - redis

【问题讨论】:

    标签: ruby-on-rails docker docker-compose actioncable


    【解决方案1】:

    您提供了 anycable-go 配置。要为 anycable-go 服务器设置自定义端口,请将 ANYCABLE_PORT: <your port> 添加到 anycable-go 映像环境或公开映像端口,如 ports: ['<your_port>:8080']

    检查 anycable 配置页面(包含环境变量信息):https://docs.anycable.io/#/anycable-go/configuration

    【讨论】:

      【解决方案2】:

      您需要通过将 anycable-rails gem 添加到您的 Gemfile 来设置 anycable-rails:

      gem "anycable-rails", "~> 1.1"
      

      使用 Redis 广播适配器时

      gem "redis", ">= 4.0"
      

      (别忘了运行 bundle install)。

      然后,通过 Rails 生成器运行交互式配置向导:

      bundle exec rails g anycable:setup
      

      配置 接下来,更新您的 Action Cable 配置:

      # config/cable.yml
      production:
        # Set adapter to any_cable to activate AnyCable
        adapter: any_cable
      

      安装 WebSocket 服务器并在配置中指定其 URL:

      对于开发来说可能是本地主机

      # config/environments/development.rb
      config.action_cable.url = "ws://localhost:8080/cable"
      

      对于生产来说,它可能有一个子域和安全连接

      # config/environments/production.rb
      config.action_cable.url = "wss://ws.example.com/cable"
      

      现在您可以为您的应用程序启动 AnyCable RPC 服务器:

      $ bundle exec anycable
      #> Starting AnyCable gRPC server (pid: 48111)
      #> Serving Rails application from ./config/environment.rb
      

      别忘了在生产环境中提供 Rails 环境

      $ RAILS_ENV=production bundle exec anycable
      

      注意:您不需要指定 `-r 选项(请参阅 CLI 文档),您的应用程序将从 config/environment.rb 加载。

      最后,运行 AnyCable WebSocket 服务器,例如anycable-go:

      $ anycable-go --host=localhost --port=8080
      

      INFO 2019-08-07T16:37:46.387Z context=main 正在启动 AnyCable v0.6.2-13-gd421927(使用 mruby 1.2.0 (2015-11-17))(pid:1362) INFO 2019-08-07T16:37:46.387Z context=main 处理 /cable 处的 WebSocket 连接 INFO 2019-08-07T16:37:46.388Z context=http 在 localhost:8080 启动 HTTP 服务器

      您可以将 AnyCable 特定的配置存储在 YAML 文件中(类似于 Action Cable 之一):

      # config/anycable.yml
      development:
        redis_url: redis://localhost:6379/1
      production:
        redis_url: redis://my.redis.io:6379/1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-24
        • 2011-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多