部署 ruby​​-on-rails 项目时出现错误“Property Listeners cannot be empty”

Posted

技术标签:

【中文标题】部署 ruby​​-on-rails 项目时出现错误“Property Listeners cannot be empty”【英文标题】:Error "Property Listeners cannot be empty" occurs when deploy ruby-on-rails project 【发布时间】:2021-05-13 15:20:02 【问题描述】:

我是 AWS Cloudformation 的新手。我的 Elastic Beanstalk Worker 使用 Ruby on Rails。 EB是一个基于cloudformation模板的Stack。 不知道为什么,最近在部署(eb deploy)的时候,Event报错如下:

AWSEBLoadBalancer 不在模板的Resources: 中。但我在源代码的.ebextensions 中找到了。

Resources:
  AWSEBLoadBalancer:
    Properties:
      AccessLoggingPolicy:
        EmitInterval: 5
        Enabled: true
        S3BucketName:
          Ref: LogsBucket
    Type: "AWS::ElasticLoadBalancing::LoadBalancer"
    DependsOn: "LogsBucketPolicy"

  LogsBucket:
    DeletionPolicy: Retain
    Type: "AWS::S3::Bucket"

  LogsBucketPolicy:
    Properties:
      Bucket:
        Ref: LogsBucket
      PolicyDocument:
        Statement:
          -
            Action:
              - "s3:PutObject"
            Effect: Allow
            Principal:
              AWS:
                ? "Fn::FindInMap"
                :
                  - Region2ELBAccountId
                  -
                    Ref: "AWS::Region"
                  - AccountId
            Resource:
              ? "Fn::Join"
              :
                - ""
                -
                  - "arn:aws:s3:::"
                  -
                    Ref: LogsBucket
                  - /AWSLogs/
                  -
                    Ref: "AWS::AccountId"
        

你能给我一些提示来解决这个问题吗?

【问题讨论】:

可以展示一下模板吗? @Marcin 感谢您检查我的问题。我已经更新了我的问题。 【参考方案1】:

错误消息显示您缺少Listeners。使用Listeners,您的平衡器定义将类似于(需要修改为您自己的设置):

  AWSEBLoadBalancer:
    Properties:
      Listeners:
        - InstancePort: 80
          InstanceProtocol: HTTP
          LoadBalancerPort: 80
          #PolicyNames: 
          #  - String
          Protocol: HTTP
          #SSLCertificateId: String
      AccessLoggingPolicy:
        EmitInterval: 5
        Enabled: true
        S3BucketName:
          Ref: LogsBucket
    Type: "AWS::ElasticLoadBalancing::LoadBalancer"
    DependsOn: "LogsBucketPolicy"

【讨论】:

以上是关于部署 ruby​​-on-rails 项目时出现错误“Property Listeners cannot be empty”的主要内容,如果未能解决你的问题,请参考以下文章

paypal 与 ruby​​ on rails 集成的“zoid 破坏了所有错误”

在 Elastic Beanstalk 环境上部署 ruby​​ on rails 应用程序时出现 AWS 数据库迁移错误

Ruby on Rails 部署到阿里巴巴 ECS 后无法加载

使用 Capistrano 将 Ruby on Rails 应用程序部署到 Windows Azure VM 时出现超时错误

如何使用 Gunicorn 查看 Django 错误的详细信息?

Heroku:org.postgresql.util.PSQLException:服务器不支持 SSL