将 Rails + Puma + Postgres 应用程序部署到 Elastic beanstalk 的正确方法是什么?

2024-03-07

我有一个 Rails 5 API,我正在尝试在 Elastic Beanstalk 上(正确地)部署它。

这是我的初始config/puma.rb我使用的文件:

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count

# Specifies the `port` that Puma will listen on to receive requests, default is 3000.
port        ENV.fetch("PORT") { 3000 }

# Specifies the `environment` that Puma will run in.
environment ENV.fetch("RAILS_ENV") { "development" }

# Allow puma to be restarted by `rails restart` command.

plugin :tmp_restart

我收到以下套接字错误:

2015/11/24 06:44:12 [crit] 2689#0: *4719 connect() to unix:///var/run/puma/my_app.sock failed (2: No such file or directory) while connecting to upstream

为了解决这个问题,我尝试添加以下行并使其正常工作:

rails_env = ENV['RAILS_ENV'] || "production"
if rails_env == "production"
  bind "unix:///var/run/puma/my_app.sock"
  pidfile "/var/run/puma/my_app.sock"
end

我真正的问题是,这是正确的方法吗?如果有人以前做过,你能指点我吗?有没有办法通过 docker 容器来做到这一点?


您也可以将 Rails 应用程序作为 Rails - Puma 应用程序部署到 Elastic Beanstalk 或 Docker。答案会更笼统,更具体从哪儿开始比提供完整的解决方案。

红宝石 - 彪马

这可能相当棘手:如果您通过控制台(在 Web 浏览器中)为 Ruby 创建新的 Elastic Beanstalk 环境,它可以默认设置 Passenger 平台,而不是 Puma 平台。也许你无法在控制台中更改它:

要使用 Puma 创建新环境,请使用eb cli。不错的攻略here http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_Ruby_rails.html。然而,在你跑步之前eb create,你还要做一件事——选择平台:

$ eb platform select

It appears you are using Python. Is this correct?
(y/n): n

Select a platform.
1) Go
2) Node.js
3) PHP
4) Python
5) Ruby
6) Tomcat
7) IIS
8) Docker
9) Multi-container Docker
10) GlassFish
11) Java
(default is 1): 5

Select a platform version.
1) Ruby 2.3 (Puma)
2) Ruby 2.2 (Puma)
3) Ruby 2.1 (Puma)
4) Ruby 2.0 (Puma)
5) Ruby 2.3 (Passenger Standalone)
6) Ruby 2.2 (Passenger Standalone)
7) Ruby 2.1 (Passenger Standalone)
8) Ruby 2.0 (Passenger Standalone)
9) Ruby 1.9.3
(default is 1):

如果您想创建 Elastic Beanstalk 的 Worker 而不是 Web Server,请运行:

 $ eb create -t worker

您可以使用控制台(Web 浏览器)或eb cli (docs http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/eb3-create.html) 设置其他配置。

Docker

以下帖子可能对如何设置 Rails + Puma + Nginx + Docker 有用:

http://codepany.com/blog/rails-5-and-docker-puma-nginx/ http://codepany.com/blog/rails-5-and-docker-puma-nginx/

这是多容器配置,其中 Nginx 绑定到端口 80 并通过套接字将请求流式传输到 puma。在你的情况下,它将是:"unix:///var/run/puma/my_app.sock"

要上传 Docker,您可以使用 AWS ECR 来存储 Docker 映像。您必须创建 Dockerrun.aws.json 文件(与 docker-compose.yml 文件非常相似),然后您可以通过 AWS 控制台(Web 浏览器)将其部署到您的环境中。

EDIT

这里是puma.rb配置文件:

threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }
threads threads_count, threads_count

bind "unix:///var/run/puma.sock?umask=0000"

stdout_redirect "/var/log/puma.stdout.log", "/var/log/puma.stderr.log", true

# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch('RAILS_ENV') { 'development' }

# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart

有些设置可能会有所不同,但重点是我将 puma 服务器绑定到 unix 套接字,并与 NGINX 连接。 NGINX 配置文件:

user  root;

error_log  /var/log/app-nginx-error.log;
pid        /var/run/app-nginx.pid;

events {
    worker_connections  8096;
    multi_accept        on;
    use                 epoll;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/app-nginx-access.log  main;

    sendfile           on;
    tcp_nopush         on;
    tcp_nodelay        on;
    keepalive_timeout  10;

    upstream appserver {
      server unix:///var/run/puma.sock;
    }

    server {
      listen 80 default_server;
      root /var/www/public;
      client_max_body_size  16m;

      location ^~ /assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
      }

      try_files $uri/index.html $uri @appserver;
      location @appserver {
        proxy_set_header  Host $host;
        proxy_set_header  X-Real-IP $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Host $server_name;
        proxy_set_header  Client-IP $remote_addr;
        proxy_pass        http://appserver;
      }

      access_log    /var/log/app-nginx-access.log;
      error_log     /var/log/app-nginx-error.log debug;
      error_page    500 502 503 504 /500.html;
    }
}

NGINX 配置文件中最重要的部分是:

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

将 Rails + Puma + Postgres 应用程序部署到 Elastic beanstalk 的正确方法是什么? 的相关文章

  • 没有路线匹配... Rails Engine

    所以我不断收到错误 No route matches action gt create controller gt xaaron api keys 测试中抛出的是 it should not create an api key for th
  • javascript - Twitter bootstrap jquery 插件未编译用于生产

    我正在使用 Twitter Bootstrap 开发 3 1 Rails 应用程序塞胡纳克的宝石 https github com seyhunak twitter bootstrap rails 在生产模式下 我可以通过管道预编译使用基本
  • Rails:仅当满足某些条件时如何运行 before_save?

    我有一个 before save 方法 我称之为重命名上传的图像 before save randomize file name def randomize file name extension File extname screen f
  • Rails 3.1 中的嵌套表单

    我在嵌套表单方面遇到问题 rails 3 1 在应该渲染 fields for 块时不渲染 fields for 块 例如 在编辑现有记录时 由于我对自己的英语不够自信 我制作了一个小示例应用程序 新行动 def new manga Man
  • Rails 教程 - User.rb 文件错误

    我正在关注 Railstutorial org 第 7 章 我正在尝试运行该应用程序 但出现以下代码错误 该错误表明我需要在文件末尾添加另一个 结束 但我已经尝试过此操作 但没有成功 错误是 Users woshea rails sampl
  • 如何在 Windows Docker 容器中启动 PowerShell (x86)?

    我正在尝试从 PowerShell 启动 Windows Docker 容器中的 PowerShell x86 但它不会启动新的 shell 我正在从 AWS Windows EC2 运行 DockerWindows Server 2019
  • 从邮件程序访问助手?

    我试图从 Rails 3 邮件程序访问帮助程序方法 以便访问会话的当前用户 我将 helper application 放在我的邮件程序类中 这似乎可以工作 但其中定义的方法对我的邮件程序不可用 我收到未定义的错误 有谁知道这应该如何运作
  • 使用 Ruby Curb 传递 GET 参数

    我正在尝试使用 Curb curb rubyforge org 调用需要在 get 请求中提供参数的 RESTful API 我想获取一个像这样的URLhttp foo com bar xml bla blablabla 我希望能够做类似的
  • 寻找在 Ruby on Rails 中构建安全 REST API 的建议

    我正开始为我正在从事的项目构建 REST API 这促使我对使用 RoR 构建 API 的最佳方法进行了一些研究 我很快发现 默认情况下 模型是向世界开放的 只需在 URL 末尾添加 xml 并传递适当的参数即可通过 URL 进行调用 那么
  • 设计忽略我的自定义策略

    我想创建一个用于访问 API 的自定义身份验证策略 我按照示例代码进行操作设计忽略自定义策略 https stackoverflow com questions 3503827 devise ignoring custom strategy
  • 在 Rails 中实现友谊模型的最佳方式

    我想在我的应用程序中实现用户的朋友系统 所以我发现 Rails 空间解决方案非常好 其想法是创建两行 in the Friendships table 第一行为发送者邀请 第二行为接收者 用户之间的关系设置为has many像这样的协会 h
  • ExecJS::Runtime在 Rails 4.1.4 中不可用

    UPDATE 现在一切正常了 谢谢deep https stackoverflow com users 2300000 deep 我安装了 node js 然后得到了一个 TZInfo DataSourceNotFound 错误 通过添加解
  • ActionMailer 响应“501 5.5.4 无效参数”

    我正在 Ruby 2 0 0 上使用 Rails 4 开发一个应用程序 在 Devise 中注册后 应用程序会发送一封电子邮件 这是发送电子邮件的代码 应用程序 模型 sponsor rb after create send email t
  • 有没有办法修复 Elastic Beanstalk 中的 Gem::LoadError

    我对 Elastic Beanstalk 比较陌生 因此希望得到一些建议 将 RoR 应用程序部署到 EB Puma 使用在 64 位 Amazon Linux 上运行的 Ruby 2 6 后 当我 转到环境 链接时 它不会呈现我的应用程序
  • AWS SAM - 通过 SAM 模板在 API 网关方法中强制执行请求验证

    我正在开发一个 SAM 应用程序 该应用程序具有 lambda 函数 并以 API 网关作为事件源 API 端点是一种 POST 方法 需要在请求正文中提供一组参数 API Gateway 为我们提供了通过使用 AWS 控制台指定请求模型来
  • 如何在rails中创建带有外键别名的装置?

    我有两个模型 App and User 其中App有一个创造者 他是User app rb class App lt ActiveRecord Base belongs to creator class name User end user
  • Rails 中多表单复选框的数据库结构

    我正在开发一个 Rails 应用程序 允许用户创建时间表 这样做时 他们应该能够选择事件发生在一周中的哪几天 我计划在表单中执行此操作的方式是每个工作日旁边有一个复选框 如下所示 etc 然而 我发现这可能不是处理这个问题的非常有效的方法
  • 如何获取 URL 端点详细信息作为无服务器框架的 `serverless.yml` 文件中的变量?

    Using 无服务器框架 https serverless com framework 到 部署 AWS Lambda 函数 Serverless 创建 或接收 特定 URL 端点字符串 我想使用该字符串 作为变量 在另一部分serverl
  • 如何避免在嵌套 Rails 表单上保存空记录

    我正在使用nested form宝石给我的AddressBook关系 当用户清空现有值时Addr 我想删除那个Addr而不是用空白保存value class Person lt ActiveRecord Base has many addr
  • Capistrano + Thin + nginx 不允许用户使用 sudo howto?

    我有一个这样的场景 我想使用 capistrano 部署 ruby on Rails 应用程序 Web 应用程序位于瘦集群上 配置文件存储在 etc thin 下 etc init d thin 中还有一个初始化脚本 因此每当我的服务器需要

随机推荐

  • 使用 graph api 获取用户所属的所有租户

    我有一个应用程序 它使用 AUTH v2 身份验证提供程序和公共租户 login microsoftonline com common v2 0 进行身份验证 现在 由于我的用户可以属于任何 AAD 租户 并且我希望我的用户能够选择他们正在
  • 在 UNIX 中比较两个文件

    我想比较两个文件 未排序 文件 1 和文件 2 我想执行 file2 file1 差异 而不管行号如何 差异不工作 我通过使用 comm 得到了解决方案 comm 23 file1 file2 会给你想要的输出 无论如何 首先需要对文件进行
  • Javascript将对象推送到全局数组会覆盖以前的值吗?

    我在 Javascript 中遇到这个问题 我想从对象数组中获取经度和纬度值 这一切都工作正常 但是当我尝试将其保存到全局数组中时 它会覆盖以前的每个值 结果是一个数组 其中包含最后推送的对象的 8 倍 全局数组 var coordinat
  • IIS Express (WebMatrix) 对外部连接开放

    我已经在端口 80 和 2012 上启用了 IIS Express HTTP 流量输入 和 IIS Express HTTPS 流量输入 的防火墙规则 此端口用于 WebMatrix 但我无法从 LAN 连接到服务器 WebMatrix 在
  • 如何在 weblogic 10.3 上的 MDB 中设置最大池大小

    我需要在 weblogic 10 3 上的 MDB 上设置最大池大小 我直接在MDB上插入这个注解 ActivationConfigProperty propertyName MaxPoolSize propertyValue 1 但它似乎
  • 使用 cronjob 运行 php 文件中的函数

    我的 php 文件 file1 php 中有一个函数 我正在尝试使用 cronjob 来调用此函数 我的 cron 作业命令是 php home name public html file1 php mail1 作为参考 函数代码如下 当直
  • 是否可以根据标准输入 git-diff 文件?

    假设我正在编辑一个文件 如果我保存文件 git diff会给我它相对于索引的变化 我想在不先保存文件的情况下获取相对于索引的更改 以获得 实时 差异 一种解决方案是将未保存的更改写入临时文件 即将文件保存在其他地方 将暂存文件写入另一个临时
  • OS X 10.10.2 与“__mpf_struct”相关的未定义符号错误

    我正在尝试编译一个程序 https github com davidsd sdpb https github com davidsd sdpb 在 OS X 10 10 2 上使用 gcc 4 9 boost 1 57 0 gmp 6 0
  • Code::Blocks:CMake 生成的 Makefile 表示“无需执行任何操作”。

    我刚刚在我的 Win7 64 Box 上安装了带有 MinGW 的 Code Blocks 并尝试编译 CMake 生成的项目 即 openclonk Clean all in clonk Cleaned clonk all Build a
  • 如何获取执行的.jar文件的路径?

    在 Java 中如何获取已执行的 jar 文件的路径 我尝试使用System getProperty user dir 但这只给了我当前的工作目录 这是错误的 我需要 jar 文件直接位于的目录路径 而不是 pwd 您能具体说明为什么需要该
  • 一种用于膨胀/收缩(偏移、缓冲)多边形的算法

    我如何 膨胀 多边形 也就是说 我想做类似的事情 要求是新 膨胀 多边形的边 点与旧 原始 多边形的边 点都处于相同的恒定距离 在示例图片上它们不是 因为那时它必须使用弧来膨胀顶点 但是让我们暂时忘记这一点 我正在寻找的数学术语实际上是向内
  • Vue cli 3 在构建后执行一些任务

    我在用vue cli 3这是我的vue config js const path require path const webpack require webpack const publicDir public const isProdu
  • Three.js 中“THREE.OrbitControls”中的相机位置发生变化

    The THREE OrbitControls当加载初始相机位置时工作正常 但是当使用按钮单击更改相机位置和相机旋转时 相机的位置发生变化 但是单击画布在新视图上旋转相机时 相机的位置突然发生变化 Camera Camera new THR
  • 将 SID 存储在变量中

    我需要一种方法将当前用户的 SID 存储在变量中 我尝试了很多变体 setlocal enableextensions for f tokens a in wmic path win32 useraccount where name Use
  • Web API 中的每个请求 DependencyResolver

    在 MVC 中 一个ModelValidatorProvider被实例化并调用以验证每个请求的模型 这意味着在 DI 环境中 它可以依赖于单个请求范围内的对象 例如工作单元或数据库上下文 在 Web API 中 这似乎已经发生了重大变化 不
  • 需要哪种算法来做到这一点?

    我有这种形式的数据 对于 x 1 y 是 1 4 6 7 9 18 16 19 之一 对于 x 2 y 是 1 5 7 4 之一 对于 x 3 y 是 2 6 4 8 2 之一 对于 x 100 y 是 2 7 89 4 5 之一 每组中只
  • 断言 __init__ 是用正确的参数调用的

    我使用 python 模拟来断言特定对象是使用正确的参数创建的 这就是我的代码的样子 class Installer def init foo bar version Init stuff pass def enter self retur
  • Spring MVC 请求中断钩子

    spring mvc 中是否有注释或其他内容可以让我在客户端关闭连接或以任何方式取消请求时立即调用某些内容 我得到了一个休息服务 通常非常快 但可能取决于用户输入几秒钟 我想在客户端断开连接后立即取消服务器端的处理 我可以实现客户端必须不时
  • 使两个不同长度的向量长度相等

    我有两个不同长度的向量 我怎样才能开始这两个系列 让它们的结局重合 x lt c 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 y lt c 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3
  • 将 Rails + Puma + Postgres 应用程序部署到 Elastic beanstalk 的正确方法是什么?

    我有一个 Rails 5 API 我正在尝试在 Elastic Beanstalk 上 正确地 部署它 这是我的初始config puma rb我使用的文件 threads count ENV fetch RAILS MAX THREADS