ruby-on-rails - Sidekiq UI在基于Kubernetes路径的路由中加载错误的 Assets 路径

标签 ruby-on-rails kubernetes sidekiq devops kubernetes-ingress

我有一个网站:

xyz.com->独立Angular4 APP(容器)

xyz.com/api/->独立Rails API APP(容器-ruby-2.4.0)

xyz.com/api/sidekiq->安装到Rails api路由。

当我尝试访问/ api / sidekiq时,它会加载数据,但 Assets 仍指向xyz.com/sidekiq,而不是xyz.com/api/sidekiq。当我单击重试时,所有尝试都尝试提交到xyz.com/sidekiq而不是xyz.com/api/sidekiq。有没有一种方法可以强制sidekiq使用其他 Assets 路径和基本url路径?

有没有办法将sidekiq Web View 作为单独的独立应用程序容器?

我正在使用Kubernetes作为我的编排工具。我正在使用Nginx Ingress进行基于路径的路由。当我转到xyz.com/api/sidekiq时,它会加载数据,但URL和 Assets 指向xyz.com/sidekiq,这就是为什么我无法重试sidekiq作业的原因,因为sidekiq网站无法正常工作。

最佳答案

您可以看看我与sidekiq团队“Sidekiq Route Mount doesn't rewrite URL in Rails API”提出的线程,该线程帮助我了解了sidekiq mount "/sidekiq"的工作方式。

我对此问题有一个简单的解决方法,发现它是解决基于路径的路由问题的最佳方法。您可以通过编写2个Ingress规则,在Ingress配置中使用nginx.ingress.kubernetes.io/rewrite-target批注来做到这一点,如下所示:

  • 将“ / ”路径路由到rails-app-service的根路径(xyz.com/* -> rails-app-service/*)
  • 将“ / sidekiq ”路径路由到rails-app-service的sidekiq Web安装路径(xyz.com/sidekiq/* -> rails-app-service/sidekiq/*)

  • 要了解有关Nginx Ingress Controller重写目标注释的更多信息,请查看官方存储库以获取详细信息:https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/rewrite#rewrite-target

    这是我最后的解决方案代码段:
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: "rails-app-ingress"
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - host: xyz.com
        http:
          paths:
          - path: /
            backend:
              serviceName: "rails-app-service"
              servicePort: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: "rails-sidekiq-ingress"
      annotations:
        kubernetes.io/ingress.class: nginx
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
        nginx.ingress.kubernetes.io/rewrite-target: /sidekiq
    spec:
      rules:
      - host: xyz.com
        http:
          paths: 
          - path: /sidekiq
            backend:
              serviceName: "rails-app-service"
              servicePort: 80
    

    关于ruby-on-rails - Sidekiq UI在基于Kubernetes路径的路由中加载错误的 Assets 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49644108/

    相关文章:

    ruby-on-rails - NewRelic 中后台任务的通知

    kubernetes - kubernetes (minikube) 中的 Fabric v2.0 - 在 peer 内部运行 docker 以运行链代码时出现问题

    kubernetes - 在 Spinnaker 内部组件部署上添加 Kubernetes 注释

    ruby-on-rails-4 - Rails 4.2:sidekiq 无法连接到 Redis(Errno::ECONNREFUSED),由 foreman 启动

    ruby-on-rails - 在 Controller 中的 View VS 中运行昂贵的方法 - Rails

    ruby-on-rails - 如何将日期与计数器匹配?

    kubernetes - 使用其 Secret 更新 Pod

    ruby-on-rails - 可以避免 Heroku 上的 ActiveRecord::ConnectionTimeoutError 吗?

    ruby-on-rails-4 - 上限部署失败, "LoadError: cannot load such file -- sidekiq/capistrano"

    ruby-on-rails - 升级到ruby 3和rails 6.1后未定义的方法 `file_fixture_path'