Amazon web services Elastic Beanstalk-如何根据环境和Sidekiq Worker运行特定的ebextensions

Amazon web services Elastic Beanstalk-如何根据环境和Sidekiq Worker运行特定的ebextensions,amazon-web-services,amazon-elastic-beanstalk,Amazon Web Services,Amazon Elastic Beanstalk,我将在Elastic Beanstalk上运行Rails应用程序,我将拥有Web和Sidekiq Worker环境。 问题是,由于它们共享相同的代码, 我需要在worker环境中运行一些特定的ebextensions(初始化worker进程和所有内容),并在web上运行一些特定的脚本(初始化appserver和所有内容) 如何根据EB上的环境运行特定的ebextensions,或者将这两个脚本分开,并告诉Elastic Beanstalk根据环境运行 sidekiq worker是否需要在web

我将在Elastic Beanstalk上运行Rails应用程序,我将拥有Web和Sidekiq Worker环境。 问题是,由于它们共享相同的代码, 我需要在worker环境中运行一些特定的ebextensions(初始化worker进程和所有内容),并在web上运行一些特定的脚本(初始化appserver和所有内容)

  • 如何根据EB上的环境运行特定的ebextensions,或者将这两个脚本分开,并告诉Elastic Beanstalk根据环境运行

  • sidekiq worker是否需要在web服务器的同一个应用程序中,但在不同的环境中? 例如: 我的应用程序 环境分期 环境工作人员 环境产品 环境生产工人

  • Sidekiq worker应该部署为worker还是webapp EB环境?(默认情况下,AWS不支持sidekiq worker)

  • 如何将Sidekiq worker连接到应用程序,例如env_staging到env_staging_worker和env_prod for env_prod_worker


  • 如果您能提供有关体系结构的详细信息或您能提供的任何帮助,我将不胜感激。

    如果您想坚持使用Sidekiq作为工作后端,则无需启动额外的弹性Beanstalk工作环境。您可以在web环境中启动Sidekiq过程。请看一下这个

    关于Elastic Beanstalk的web和worker环境背后的实际想法和架构,我将尝试总结一下Amazon的:

    Web环境承载响应用户HTTP请求的HTTP服务器和Web应用程序

    工作环境承载执行后台作业、长时间运行任务等的应用程序(可以与web应用程序相同,但不一定非得如此)

    Web和工作环境应通过(额外的AWS功能/服务)连接。 您的web应用程序应该将消息发送到此队列,工作环境将使用此队列中的消息。启动工作环境时,可以选择它应该连接到哪个SQS队列。Elastic Beanstalk将自动安装并启动一个守护进程,该守护进程使用来自该队列的消息,并将它们转换为HTTP POST请求。这些请求被发送到本地主机和您也可以定义的路径。请求的正文将包含来自队列的消息内容。应用程序应该解析内容并相应地触发后台作业

    你看,这将使Sidekiq实际上过时,因为SQS队列将处理队列逻辑

    如果您不必使用Sidekiq,并且您的应用程序是用Rails>=4.2编写的,那么您可以将gem用于后台任务。它负责所有消息的发送和解析,并允许您简化部署设置。无需编写和维护ebextension脚本