Rails 6 无法连接到 AWS Elastic Beanstalk 预置的 RDS。 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”

2024-02-21

我在尝试向 Elastic Beanstalk 启动示例 Rails 6 应用程序时遇到了非常困难的情况。对于上下文,我遵循这些说明

将 RDS 添加到 Ruby 应用程序 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Ruby.rds.html

将 RDS 添加到 Beanstalk https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.db.html

我已按照这些说明进行操作,但仍然无法连接到我配置的 rds 数据库。我不断收到以下错误:

PG::ConnectionBad:无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?

每当我尝试跑步时RAILS_ENV=production rails db:migrate或任何其他 rake 任务,我不断收到该错误。

在我的 AWS 控制台上,在配置 and Software,我有以下环境变量:

也在我的database.yml文件中我列出了 rds 配置变量。

production:
 adapter: postgresql
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

我已按照文档中的说明映射了我的值,并确信它们是正确的。

最后,我已经 sshed 到我的 beanstalk 配置的 ec2 实例并执行了以下命令:

psql -U username -p 5432 -h examplehost.rds.amazonaws.com -d ebdb

提供了密码并且能够连接。我真的束手无策,我花了太多时间试图诊断这个问题,但已经没有想法了。我不知道下一步该去哪里寻找解决此问题的想法。我读了太多的堆栈溢出问题和博客,让我头晕目眩。如果有人对如何解决这个问题有任何想法,我将不胜感激。

- -更新 - - 我在 elastic beanstalk 控制台上创建了一个新的环境变量。

ENV['DATABASE_URL'] = postgres://YourUserName:YourPassword@YourHostname:5432/YourDatabaseName

我进行了必要的配置,上传了 .zip 文件,但与数据库的连接失败。

- - 更新 - - -

printenv不显示 beanstalk 提供的变量,但是此命令显示sudo /opt/elasticbeanstalk/bin/get-config environment.


我的第一个建议是,在我看来,自己创建 Amazon RDS 是一个更好的选择,而不是与 Beanstalk 绑定。

正如AWS文档 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html表示(强调我的):

AWS Elastic Beanstalk 支持在 Elastic Beanstalk 环境中运行 Amazon Relational Database Service (Amazon RDS) 实例。要了解相关信息,请参阅将数据库添加到您的 Elastic Beanstalk 环境。这对于开发和测试环境非常有用。但是,它对于生产环境来说并不理想,因为它将数据库实例的生命周期与应用程序环境的生命周期联系在一起。

And:

要将数据库实例与环境分离,您可以在 Amazon RDS 中运行数据库实例并将应用程序配置为在启动时连接到它。这使您能够将多个环境连接到数据库、终止环境而不影响数据库,并通过蓝绿部署执行无缝更新。

在我看来,即使对于测试或开发,也始终建议配置一个小型数据库实例,并使您的应用程序能够定义最合适的机制来连接到数据库。

唯一的downside是你可能需要配置一个VPC https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/rds-external-defaultvpc.html,尽管它实际上不应该是一个问题,并且在任何情况下,它都是值得的。

如果出于任何原因您需要使用 Beanstalk 提供的 RDS 数据库,也许您有一些解决方法来解决您的问题(这应该是一个解决方法,因为您的配置看起来不错 - 请仅验证是否为正确的 Beanstalk 环境定义了数据库配置) 。

例如,您可以尝试的一件事是将数据库连接配置存储在 S3 存储桶中,如AWS 文档 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/rds-external-credentials.html。这个想法基本上是创建一些包含必要连接信息的配置文件,将其存储在 S3 中,并在应用程序中读取该配置,即处理该文件,以便初始化数据库。

但也许你可以尝试另一种方法。

请考虑这一点所以问题 https://stackoverflow.com/questions/24562714/elastic-beanstalk-custom-ami-cant-see-environment-variables,以及乔恩·麦考利夫和其他人的回答。如前所述,Beanstalk 将为您的应用程序提供环境变量,但这些变量可能不会作为 shell 变量公开,它们将以不同的方式公开给您的应用程序,具体取决于应用程序需要执行的运行时。

对于 Ruby,您可以在正确的方法 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-softwaresettings.html但是,出于某种原因,您的程序无法访问该信息。

这或许也可以解释为什么printenv如果您的变量但不打印任何内容获取配置 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platforms-scripts.html脚本确实如此。

但也许你可以利用这样一个事实get-config为您提供正确的信息,并且可以在您的ENV通过执行get-config每个的脚本RDS*关键,也许在你的environment.rb- 请注意,当我还是一名学生时,我用 Ruby 进行了编程,但从那以后已经很长一段时间了,请在您认为合适的文件中执行任务 - 或使用.ebextensions https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-configuration-methods-during.html和自定义配置文件。你可以找到几个例子here https://github.com/awsdocs/elastic-beanstalk-samples/blob/9720e38e9da155752dce132a31d8e13a27364b83/configuration-files/aws-provided/instance-configuration/timezone-linux.config.

例如,考虑以下内容(复制并粘贴,稍作修改这个示例配置 https://github.com/awsdocs/elastic-beanstalk-samples/blob/9720e38e9da155752dce132a31d8e13a27364b83/configuration-files/aws-provided/security-configuration/rds-ssl-java.config):

commands:
  01_update_env:
    command: "/tmp/update_environment_variables.sh"

files:
  "/tmp/update_environment_variables.sh":
      mode: "000755"
      content : |
        #!/bin/bash

        RDS_HOSTNAME=$(/opt/elasticbeanstalk/bin/get-config environment -k RDS_HOSTNAME)
        if [ -z "$RDS_HOSTNAME" ]; then
                echo "Could not determine RDS hostname"
                exit 1
        fi
        echo "RDS hostname $RDS_HOSTNAME..."
        # Just export the variable at OS level, or make it visible to
        # the rails env in some other way
        export RDS_HOSTNAME=$RDS_HOSTNAME

        # Process the rest of the variables...
        # Probably we should create a list and iterate through it

类似的方法可能是在这个堆栈溢出问题 https://stackoverrun.com/es/q/8088203,但仅限于 Beanstalk 将用来封装您的应用程序的容器。 AFAIK,容器应接收为env变量不同RDS*与数据库配置相对应。

丹,请注意,我没有测试过这些解决方案,它们只是想法:请小心,我不想对您的系统造成任何损坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 6 无法连接到 AWS Elastic Beanstalk 预置的 RDS。 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432” 的相关文章

随机推荐

  • 在 Python 中测试所有组合

    我有两组选择 optionList1 a1 a2 a3 an optionList2 b1 b2 b3 bn 选项列表中的元素数量不一定相等 我必须从第一个选项列表中选择两次 如何确保我已尝试了第一个列表中的 2 个选项和第二个列表中的一个
  • 如何从外部函数更改局部静态变量值

    include
  • JQuery .ressized,如何为alsoResize属性选择子级

    我有弹出的窗口 可以拖动和调整大小 一切都很好 除了我需要调整大小窗口来调整其中的 div 大小 这可以通过设置轻松完成alsoResize selector 但是 此窗口的每个实例都具有相同的 div 和相同的类名 如果调整一个窗口的大小
  • openOptionsMenu 不适用于全屏

    我有一个全屏模式的活动 android theme android style Theme NoTitleBar Fullscreen 我用按钮打开选项菜单 dmenu setOnClickListener new OnClickListe
  • ggsurvplot - 轴交叉于 0,0

    Survminer产生不错的情节 但有没有办法进一步改变常规的结果ggplot 命令 我尝试做的是使 y 轴从原点开始 如上所述here https stackoverflow com questions 13701347 force th
  • 使用 ObjectDB 搜索空用户数据库时出现问题

    我正在创建一个 java 应用程序 它使用 ObjectDB 来创建和维护一组数据库 我目前正在尝试实现一个数据库来存储由用户名和密码字符串组成的用户对象 在 JFrame swing 类上 我有一个用于创建新用户的按钮 单击此按钮时 我希
  • 通过周围像素的平均值去除图像中的孔

    任何人都可以帮助我用从相邻非零像素获取的值来填充这些黑洞 谢谢 做到这一点的一个好方法是解决线性热方程 http en wikipedia org wiki Heat equation 你要做的就是修复好区域像素的 温度 强度 让热量流入坏
  • 基本 Node.js 项目的“属性‘程序’不存在”

    我创建了简单的node js应用程序 源代码来自这里https azure microsoft com en us blog visual studio code and azure app service a perfect fit ht
  • 明显的 BufferBlock.Post/Receive/ReceiveAsync 竞赛/bug

    交叉发布到http social msdn microsoft com Forums en US tpldataflow thread 89b3f71d 3777 4fad 9c11 50d8dc81a4a9 http social msd
  • 如何使 Onboarding 与 iOS13 中的 Scene Delegate 配合使用?

    我正在尝试在 SceneDelegate 中设置我的入门屏幕 当我运行下面的代码时 它可以编译 但只是进入黑屏 其中有很多针对 AppDelegate 的精彩入门教程 但针对 iOS13 的新 SceneDelegate 的入门教程却很少
  • 如何查看 /bin/sh 指向的内容

    我正在阅读 bin sh 和 bin bash 之间的差异 并遇到了这个有趣的问题 答案 here https stackoverflow com questions 5725296 difference between sh and ba
  • PHP:如果!空&空

    所以我有这个表格 有2个字段 Youtube 和 链接 我想做的如果已经填写了YouTube 应该这样做 if empty youtube if pos false echo Du skal indtaste youtube et URL
  • 目前的iphone版本是否支持彩信? [复制]

    这个问题在这里已经有答案了 可能的重复 是否可以使用 iPhone SDK 发送图片消息 https stackoverflow com questions 5150271 is it possible to send a picture
  • 实体框架 ObjectContext 分享 - 优缺点

    在我的项目中 我使用实体框架 4 0 作为 ORM 将数据保存在 SQL Server 中 我的项目是应用程序的功能区 主窗体中有网格视图和导航树 其顶部有功能区面板 我的应用程序基本上是一个 CRUD UI 几乎没有业务逻辑 第一次使用
  • 位域元素的默认值

    在 C 11 中可以做 struct S int i 42 如果忘记初始化成员i它 默认初始化为 42 我刚刚尝试过 位域为 struct S int i 42 5 我正在得到 错误 预期为 在 标记之前 位域成员是否存在此功能 如果存在
  • JNI 的用处[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取文本字段中最常用的 10 个单词

    我有一个包含数千个文档的索引 每个文档都有一个全文字段 我想搜索所有这些字段并获取最常出现的 10 个最常见的单词 如果可能的话 我还想要一种在 Kibana 上可视化它的方法 实现此目的的最常见方法是使用keyword datatype
  • Drupal CCK 的复选框

    我是 Drupal 的新人 到目前为止很喜欢 我正在创建 CCK 自定义内容类型 我需要以复选框格式制作便利设施列表 所以我做了 文件类型 Text 小部件类型 复选框 单选按钮 和允许值列表 onsite dining 现场用餐 Meet
  • 如何在启动时运行命令?

    我试图弄清楚如何在启动时运行命令 就像我将其输入控制台一样 我在 Raspberry Pi 上使用 Rasbian 但我认为这个问题对于 Debian 来说通常是相同的 我尝试运行的命令是 sudo screen mono server e
  • Rails 6 无法连接到 AWS Elastic Beanstalk 预置的 RDS。 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”

    我在尝试向 Elastic Beanstalk 启动示例 Rails 6 应用程序时遇到了非常困难的情况 对于上下文 我遵循这些说明 将 RDS 添加到 Ruby 应用程序 https docs aws amazon com elastic