Procfile 和 foreman

建议学时:4 小时。

Heroku 应用程序包含一个 Procfile,它指定应用程序在启动时执行的命令。你可以使用 Procfile 来声明各种进程类型,包括:

  • 应用的网络服务器
  • 多种类型的工作进程
  • 单例进程,例如时钟
  • 在部署新版本之前运行的任务

Procfile 命名和位置

Procfile 始终是一个 Procfile 没有文件扩展名的简单文本文件。
Procfile 必须位于应用程序的根目录中。如果放在其他任何地方,它就不起作用。

Procfile 格式

Procfile 在单独的行上声明其进程类型,每行都具有以下格式:

<process type>: <command>

是你的命令的字母数字名称,例如 web, worker, urgentworker, clock,等等。

表示每个程序在启动时应该执行的命令,例如 rake jobs:work.

Web 进程

web: bundle exec rails server -p $PORT

对于许多简单的应用程序,一个 web 进程类型就足够了。对于更复杂的应用程序,并坚持更明确地声明应用程序所需的运行时进程的推荐方法,你可能希望定义其他进程类型。例如,Rails 应用程序提供了这种额外的进程类型:

worker:  bundle exec rake jobs:work

在 Heroku 之外使用 Procfile

如果你有一个单独的 Rails 应用程序,也想使用 Procfile 的形式管理进程,可以使用 foreman。

参考文档

  1. https://devcenter.heroku.com/articles/procfile
  2. https://help.aliyun.com/document_detail/116527.html

foreman: 管理基于 Procfile 的应用程序

foreman 是一个基于 Procfile 的应用程序,不要将其包含 foreman 在你的 Gemfile 中。Foreman 不是库,不应影响应用程序的依赖关系树。仅仅为了满足项目的依赖矩阵而更新工头的依赖项之一是有问题的,因为这反过来可能会破坏正在做同样事情的旧应用程序。

现在的 Rails 网络应用程序运行起来变得越来越复杂。Rails 应用程序不再包含单个 Web 进程。为了不让让应用程序及其所有部分运行变得更加复杂,我们将使用 foreman 来管理这些进程。可以使用 可以使用 Procfile:

Procfile

web: bin/rails server -p 3000
js: yarn build --watch

执行

foreman start -f Procfile.dev

或者下面的脚本
bin/dev

#!/usr/bin/env bashif ! command -v foreman &> /dev/null
thenecho "Installing foreman..."gem install foreman
fiforeman start -f Procfile.dev

foreman 将启动与你的应用程序关联的所有进程,并显示 stdout 每个 stderr 进程。流程按类型进行颜色编码,以便于阅读。$PORT 将由 foreman 自动分配并提供给每个底层流程。

并发

Foreman 支持运行一种以上的每种进程类型。

# run 1 of each process type, and 2 workers
$ foreman start -c worker=2# do not run a clock process
$ foreman start -c clock=0

端口分配

Foreman 默认从 5000 开始端口分配,并按照你在 Procfile 中 Worker 和进程类型的顺序分配。

对于本文 Procfile 顶部使用的,web.1 将被分配端口 5000,worker.1 将被分配 5100,clock.1 将被分配 5200。如果你运行 2 个 Web 进程,web.2 将被分配 5001。

实践

rails new app -j esbuild -T

Procfile.dev

web: bin/rails server -p 3000
js: yarn build --watch

我们也可以加入其他进程,例如我们使用 docker-compose 启动一个 redis 服务

docker-compose.yml

version: '3'
services:redis:image: redis:5ports:- 6379:6379

继续调整 Procfile.dev

docker: docker-compose up
web: bin/rails server -p 3000
js: yarn build --watch

Procfile 和 foreman相关推荐

  1. Foreman安装配置

    Foreman安装配置 官方网站: https://theforeman.org 环境: CentOS7.2 puppet-3.8.7 foreman-1.13 一.配置yum源 https://th ...

  2. foreman源NO_PUBKEY 6F8600B9563278F6

    版权声明:本文可能为博主原创文章,若标明出处可随便转载. https://blog.csdn.net/Jailman/article/details/82149269 /etc/apt/sources ...

  3. foreman架构的引入2-安装前环境准备

    零基础学习Puppet自动化配置管理系列文档 Foreman官网提供了每个版本非常完善的安装步骤,无论是源码安装还是rpm包安装都变得非常方便.而且Foreman通过puppet模块对安装步骤进行了封 ...

  4. foreman容器化部署

    一.前言 最近公司要求对一批GPU服务器安装操作系统,之前同事一直采用cobbler安装系统,一旦服务器设置为pxe优先启动,会出现重复安装系统的问题,并且如果线上服务器忘记修改第一启动项为硬盘启动, ...

  5. Centos 7 Puppet之foreman介绍安装测试

    一.简介 1.前言(引用一下网上的资料) 随着企业的 Linux 系统数量越来越多,管理问题便成为一个相对麻烦并需要急 迫解决的问题,这里有 2 个 Key Message:1)统一管控体系非常重要, ...

  6. foreman架构的引入3-安装Foreman1.5.3架构(all-in-one)

    零基础学习Puppet自动化配置管理系列文档 注意:本实验是在离线情况下安装的,所以需要在本地创建自己的yum仓库,创建方法可参考<如何根据版本制作属于自己的puppet yum源>,如何 ...

  7. foreman架构的引入6-整合puppetmaster

    零基础学习Puppet自动化配置管理系列文档 注:以下内容是在foreman1.6.3+puppet2.6.2环境下进行操作.更多配置请参考官网http://theforeman.org/manual ...

  8. ubuntu12.04安装puppet foreman

    一.安装部分 前提: aptitude -y install puppet augeas-tools aptitude -y install puppetmaster sqlite3 libsqlit ...

  9. 几种部署工具比较foreman, ansible, fuel

    有些可能不是一个级别的东东. 在onos部署中,可以用到的是foreman, fuel, 而ansible,作为一种方便的底层部署工具,目前已经为fuel所使用中.odl也在用?FIXME forem ...

最新文章

  1. js监听地址栏变化_vue中本地储存也可以实时监听
  2. SVN 版本控制的数据合并规则
  3. 文件I0通用的IO模型
  4. Introduction of Version Control/Git, SVN
  5. centos 6.5 yum java_Centos6.5 yum 安装jdk1.8
  6. MyBatis动态传入表名,字段名参数的解决办法
  7. 多路查找树之2-3树的插入原理
  8. 【华为】对标谷歌Dropout专利,华为开源自研算法Disout,多项任务表现更佳
  9. Android编程 移动应用开发 经典习题案例 (附案例 注意点)
  10. 音频-什么是PCM编码格式?
  11. mysql删除图书信息,图书管理系统(一):出版社列表增加、删除和编辑
  12. 一、OpenAI ChatGPT 注册使用
  13. 被吹上天的802.11ac Wave2到底好在哪?还有,Wave1哪去了?
  14. bp1048仿真器的使用
  15. JAVA计算机毕业设计社区生鲜电商平台(附源码、数据库)
  16. PowerShell的基本使用方法
  17. Vue使用Object标签对接IC读卡器硬件
  18. 非常好用的论文写作模板!
  19. 基于网页网站在线视频点播系统 毕业设计毕设源码毕业论文开题报告参考(1)功能概要
  20. 还原分区失败怎么办?为什么会出现还原分区失败

热门文章

  1. Centos7 Mondo 制作系统iso镜像文件
  2. PyramidBox 中文翻译及阅读笔记
  3. 小型新闻发布系统-总结
  4. 90分钟可以做什么?
  5. java 不可变性_JAVA不可变类(immutable)机制与String的不可变性(推荐)
  6. 2021-07-14 PLC电机启停控制编程
  7. 阿里巴巴java开发规范Idea插件使用手册
  8. 手Q入局NFC支付要抢Apple Pay饭碗
  9. awk分析web日志
  10. 《FFmpeg从入门到精通》读书笔记(一)