问题标签 [12factor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
221 浏览

dependencies - 提供本地工具,同时保持最大的可移植性

Twelve-Factor App宣言说它适用于 Web 应用程序,“......与底层操作系统有一个干净的合同,在执行环境之间提供最大的可移植性”[强调由我添加]

但后来它说

十二因素应用程序也不依赖于任何系统工具的隐含存在。例子包括炮击到ImageMagickcurl。虽然这些工具可能存在于许多甚至大多数系统上,但无法保证它们将存在于未来可能运行该应用程序的所有系统上,或者未来系统上的版本是否与该应用程序兼容。如果应用程序需要使用系统工具,则应将该工具出售到应用程序中。

他们之前将“供应商”定义为:

范围为包含应用程序的目录(称为“供应商”或“捆绑”)。

例如,当(至少在 Linux 上)本机 64 位可执行文件不能在 32 位环境中运行时,应该如何做到这一点——更不用说在其他操作系统上运行了?还是有更好的方法来处理这个可移植性问题?

0 投票
3 回答
3333 浏览

ruby-on-rails - 在 12 要素应用程序中管理配置

我很喜欢在 Heroku 上使用 Rails,而且我可以调整 Heroku 应用程序的配置属性,而无需提交更改xyz.yml和重新部署。

在我的 Rails 应用程序中完全取消 Yaml 配置文件,并尽可能依赖在 ENV 中存储配置会很好。这与12 因素配置原则相一致。

但是,在从基于 Yaml 的配置管理切换到基于 Heroku/12 因子的配置管理时需要权衡取舍。

  • 虽然部署(qa、stage、prod、dev、demo、labs)的扩散确实会导致 Yaml 文件的扩散,但复制粘贴来创建新的配置文件非常容易。我看不到在 Heroku 中将配置文件从一个部署“复制”到另一个部署的方法。
  • 在 repo 中存储配置数据意味着,在 Heroku 的情况下,部署和配置以及应用程序是在单个操作中完成的。如果我要将配置从 Yaml 文件中移到 ENV 变量中,我必须在部署后在单独的步骤中配置我的应用程序。

想听听在他们的私有应用程序中使用 12 因素样式配置的人的意见,以及他们如何跨大量部署管理大量配置变量。

  • 如何快速配置新部署?
  • 如果不是 repo,您​​将配置变量的权威来源保存在哪里?您如何在开发人员之间分发它?

谢谢!

0 投票
0 回答
288 浏览

ember.js - 12 因素方法和客户端 Web 应用程序

这个问题非常开放,但是是否有任何资源可以讨论(一页)客户端 Javascript 应用程序的 12 因素方法?如果它考虑使用 EmberJS 构建 Web 应用程序的 12 因素方法,那就更好了。

0 投票
2 回答
602 浏览

node.js - 12Factor 应用程序代码库因素我应该拆分

我最近被 12Factor 应用程序所吸引,因为它是我应该强迫自己遵循的强有力的指导方针。所以在我目前正在进行的一个项目中,我决定使用它们。虽然我对我的代码结构有疑问:

我有一个网站,它只会创造新的工作,人们可以在那里查阅工作的结果。作业被排入分布式队列(ftm Redis),工作人员接受每个作业并执行它们。我决定将代码库拆分为 2:

  • 将排队作业和用户将访问结果的实际站点。
  • 完全自主的工人。

中间有一个节点包,它封装了通信(排队等),节点之间的唯一通信是通过 Redis。

所以我只是想确保在我构建分布式系统时这仍然与 12factor 保持一致。如果不是,我应该使用启动脚本在一个代码库中构建所有内容,该启动脚本可以启动一个或另一个?

谢谢你的帮助

0 投票
2 回答
381 浏览

ruby-on-rails - Rails 3.2:12 因子应用程序

在 Web 应用程序宣言“ The Twelve Factor App ”的日志记录部分中,它建议每个进程将日志发送到 STDOUT。

如果我使用 Web 服务器(“rails 服务器”)的进程和后台作业的 Sidekiq 进程(“bundle exec sidekiq”)在本地进行 Rails 开发,我希望日志出现在单个流中,但我仍然想在我的模型、视图、控制器和 Sidekiq 工作人员中使用 STDOUT。

有没有办法或工具能够将两个 STDOUT 流合并在一起,以便将日志存储在一个流中,以便可以通过拖尾单个文件来查看它们?

0 投票
1 回答
3440 浏览

django - 在 Heroku 上部署 Django 应用程序:我可以在 .env 文件中手动设置环境变量吗?我需要安装 autoenv、heroku-config 等工具吗?

我的目标:

我打算按照“十二要素应用程序”方法在 Heroku 上构建我的 Django 应用程序。

介绍:

我正在关注“Heroku 上的 Django 入门”快速入门指南。目前我有以下目录结构:

我安装了 django-toolbelt,创建了我的简单 Django 应用程序,在我的 Procfile 中启动了该过程......一切似乎都工作正常,但是当我为 Heroku 环境配置应用程序并添加时,问题就开始了:

到我的 settings.py 文件的底部。

我将应用程序的存储库推送到 Heroku,在浏览器中$ heroku open成功访问了应用程序,但在本地:dj_database_url.config() 返回了一个空字典

本地:

OS X 10.8.4
pip==1.4.1
virtualenv==1.10.1
virtualenvwrapper==4.1.1
wsgiref==0.1.2
Postgres.app 在端口 5432 上运行

环境变量:

hellodjango_venv:

Django==1.5.2
dj-database-url==0.2.2
dj-static==0.0.5
django-toolbelt==0.0.1
gunicorn==18.0
psycopg2==2.5.1
static==0.4

这就是我的 wsgi.py 文件中的内容:

这就是我的 manage.py 文件中的内容:

这就是我的 Procfile 中的内容:

环境变量:

在 Heroku 上:

环境变量:

研究:

在环境中存储配置:来自 The Twelve-Factor App

@adamwiggins 写道:

十二因素应用程序将配置存储在环境变量中......环境变量很容易在部署之间更改,而无需更改任何代码;不像配置文件。

dj_database_url.config()正在返回一个空对象:来自 Heroku 论坛

@chrisantonick 回复:

... dj_database_url.config() 从 Heroku 环境变量中获取 Postgres 凭据。但是,在您的本地机器上,这些变量不存在。你必须把它们放在你的 /venv/bin/activate shell 脚本中……把变量放在那里。像
DATABASE_URL = "xxx"
export DATABASE_URL
对于它需要的每一件事。然后...“停用”...并再次...“激活”以重新启动它。

Django 和 Heroku 入门指令引发了错误配置错误:来自 Heroku 论坛

@jwpe 回复:

... dj-database-url 是一个很棒的实用程序,因为它允许您在开发和生产环境中使用完全相同的 settings.py 代码,正如“12 因素应用程序原则”中所推荐的那样...什么 dj_database_url.config () 正在寻找 DATABASE_URL 环境变量,然后将其解析为 Django 的首选格式...如果您尚未在 Heroku 上手动创建和提升 postgres 数据库,则 DATABASE_URL 将不存在,并且将引发 ImproperlyConfigured 错误. 将 dj_database_url.config() 的默认值设置为本地 DB URL 是确保应用程序在开发环境中工作的一种方法。但是,它不一定是唯一的方法。也许更好的选择是在本地 .env 文件中手动设置 DATABASE_URL。然后,当使用 Foreman 在本地运行您的应用程序时,它将作为环境变量加载,并且 dj_database_url 会找到它。所以你的 .env 将包含:

DATABASE_URL=postgres://user:pass@localhost/dbname

这意味着settings.py您只需要:

DATABASES['default']= dj_database_url.config()

...使用本地环境变量而不是单个硬编码默认值的优点是您的代码将在设置了 DATABASE_URL 的任何环境中运行。如果您更改本地数据库的名称,或者想要在不同的开发机器上运行您的代码,您只需要更新您的 .env 文件而不是修改 settings.py

如何管理生产/登台/开发 Django 设置?:来自 Heroku 论坛

@rdegges 回复:

...试图让您的应用程序以如下方式运行:

  • 当您在笔记本电脑上运行该应用程序时,它使用您的本地 Postgres 服务器。
  • 当您在暂存 Heroku 应用程序上运行该应用程序时,它使用 Postgres 服务器插件。
  • 当您在生产 Heroku 应用程序上运行该应用程序时,它使用 Postgres 服务器插件。

实现这一点的最佳方法是使用环境变量!...环境变量是处理不同环境之间的应用程序配置的最优雅(和可扩展)的方式...与其拥有许多设置文件,不如定义一个文件:settings.py,并拥有它利用环境变量来提取服务信息和凭据...在 Heroku 上,您可以通过运行手动设置环境变量:

... 总是有 Kenneth Reitz 伟大的 autoenv 工具。这使您可以在项目目录中定义一个简单的 .env 文件……并且每次进入项目目录时,这些环境变量都会自动设置,因此您不必做任何特别的事情!只需运行您的项目,一切都会按预期工作:python manage.py runserver

作为第一次尝试:

DATABASE_URL我在我的 .env 文件中 手动设置:DATABASE_URL=postgres://dbuser:dbpassword@ec2-184-73-162-34.compute-1.amazonaws.com:5432/dbname

但是当我运行$ foreman start命令时:

并试图在浏览器中打开我的应用程序http://0.0.0.0:5000

但是,dj_database_url.config()返回:

作为第二次尝试:

DATABASE_URL我在我的 .env 文件中手动设置更改主机。我用“localhost:5000”替换了“ec2-184-73-162-34.compute-1.amazonaws.com:5432”。$ deactivate然后再$ workon hellodjango_venv一次。

DATABASE_URL=postgres://dbuser:dbpassword@localhost:5000/dbname

但是,当我运行$ foreman start命令时:

并试图在浏览器中打开我的应用程序http://0.0.0.0:5000

这一次,dj_database_url.config()返回:

作为第三次尝试:

我安装了 autoenvmac-pol:~ oubiga$ pip install autoenv
从这本Cookbook Kenneth Reitz 写的,我说:

在我的 .bashrc 文件中。

我运行$ foreman start命令:

并试图在浏览器中打开我的应用程序http://0.0.0.0:5000:它工作!

但是,dj_database_url.config()再次返回一个空字典。

作为最后的尝试:

我对这个命令很好奇python manage.py runserver,我检查了它。

并试图在浏览器中打开我的应用程序http://127.0.0.1:8000/:它不起作用!

ImportError: No module named hellodjango.urls被提出来。

ROOT_URLCONF = 'hellodjango.hellodjango.urls'我在我的 settings.py 文件中替换为ROOT_URLCONF = 'hellodjango.urls',它终于起作用了。

正如预期的那样,dj_database_url.config()返回了一个空字典。

所以:

现在,我感到有些不知所措。恐怕我在这里误解了一些核心概念。

  • 使用 gunicorn 而不是 Django 开发服务器有什么意义?
  • 为什么dj_database_url.config()有时返回一个完全填充的字典,有时返回一个空字典?
  • 我可以在 .env 文件中手动设置环境变量吗?我需要安装 autoenv、heroku-config 等工具吗?

先感谢您。

0 投票
1 回答
177 浏览

12factor - 12 因素:动态后端配置

十二要素应用程序后端的默认配置是将其(网络)位置放在环境变量中,例如DB=mysql://user:pw@host/db_name.

但是,如果您的后端配置更加动态,推荐的方式是什么?在我的情况下,该应用程序可以根据环境使用 1 到 n 个后端。我的想法是使用像 JSON 这样的序列化格式并将其放在一个变量中,例如

这是处理这种情况的更好方法还是更好的选择?

0 投票
1 回答
3506 浏览

ruby-on-rails - Heroku 没有显示我的图像

我有一个问题,我的图像没有显示在 heroku 上 .. 推送中没有错误消息,我在我的 gemfile 中安装了 gem 'rails_12factor' ..

所以我真的不知道该怎么办

地址是http://middiz.herokuapp.com/

你能看看伙计们并帮助我吗?

非常感谢

图像描述

0 投票
1 回答
6561 浏览

ruby-on-rails - 为我的项目安装特定的 gem

我需要将 rails_12factor gem 安装到我的应用程序的 gem 文件中,以便成功部署到 Heroku。我能够安装 gem (gem install rails_12factor),如果我运行 gem list 它显示它是在本地安装的。如何将特定的 gem 安装到我的包中?不确定我问的是否正确,但正如您在下面看到的,它是在本地安装的,正如我所说。

我能够在此路径 C:\Users\vern.gem\specs\rubygems.org%443\quick\Marshal.4.8 中找到 rails_12factor-0.02.gemspec

我注意到它是一个 gem 规范文件,但是我不知道如何将它安装为我的项目的 gem 包的一部分

以下是我推送到heroku时得到的结果:

如您所见,它删除了 rails_12 因素 gem,所以我不太确定该怎么做。我也收到警告

警告:包含“rails_12factor”gem 以启用所有平台功能有关更多信息,请参阅https://devcenter.heroku.com/articles/rails-integration-gems。也许有一个我没有意识到任何帮助的解决方案将不胜感激。谢谢

Ruby 版本 2.0.0 Rails 4.0.0 Windows 7 64 位

0 投票
0 回答
103 浏览

javascript - GA(或其他 javascript 应用程序)以 12Factor-y 方式配置和调用

我的应用由 2 个部分组成,1 个私有管理和 1 个支付网关,它们部署到不同的 url:

它们需要能够存在于 1 台服务器上,但是,域在同一个vhost文件中进行管理。

我想将 Google Analytics 配置为在每个这些 url 上单独运行,但要在环境变量中存储尽可能多的配置(符合 12Factor)。

我想避免使用应用环境(开发、登台、生产)来确定何时加载 GA,并且我想尝试使用尽可能少的变量。

我正在考虑使用:

然后在我的代码中,使用:

我认为这涵盖了我的所有基础:

  • 配置在 ENV 中
  • 每个部署都有自己的分析代码
  • 每个部署只需要维护自己的字符串
  • 没有分析的部署(开发、登台等)不包括 javascript

我担心它的可扩展性不够。

例如:
如果我需要特殊的分析代码或支付网关配置以符合我们的隐私政策,我应该如何修改我的方法?

我想避免 2 条路径,但如果 2 条路径是唯一的方法,我不能依赖 url: