问题标签 [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.
python - 避免 django 设置文件中的代码重复
我使用base.py
、local.py
、prod.py
和遵循 Django 设置最佳实践staging.py
。
我的难题是是否可以接受代码重复。让我们举这个例子。我需要设置一个在大型固定值字典中使用的 URL 来配置包。
local.py
CONF_URL = 'hard coded local value'
prod.py
CONF_URL = os.environ['CONF_URL']
staging.py
CONF_URL = 'some other hard coded value'
然后我有类似的代码
- 我不能输入
PACKAGE_CONF
,base.py
因为我们base
是从叶子设置文件中导入的,而不是相反。 - 我可以写一些东西来发布过程
PACKAGE_CONF
,比如使用 env 文件,但这似乎不必要地复杂。 - 我可以强制用户
CONF_URL
从环境中获取,但这不是一个好的本地开发体验。 - 最后我可以复制
PACKAGE_CONF
,local
和.staging,
prod
我对这些选项中的任何一个都不满意。有编写精美设置文件经验的人可以提供更好的解决方案吗?
java - 12 因素应用程序 - 依赖泄漏
一直在浏览12 因素应用程序清单,在“依赖项”部分下提到了以下内容。
十二因素应用程序从不依赖于系统范围包的隐式存在。它通过依赖项声明清单完整而准确地声明所有依赖项。此外,它在执行期间使用依赖隔离工具来确保没有隐式依赖从周围系统“泄漏”。完整而明确的依赖规范统一应用于生产和开发。
在Spring boot应用的上下文中,以下是我的理解。
- 使用任何构建工具(例如 maven/gradle)
- 在 pom.xml 或 build.gradle 中声明所有依赖项。
这是一个正确的理解吗?我无法从周围的系统中理解“泄漏”的部分。
这是否意味着 JVM 也应该在应用程序中?
microsoft-graph-api - 使用 Azure B2C 活动目录在用户级别进行 2FA 身份验证
我们有业务应用程序,目前我们正在实施 Azure B2C 活动目录。我们将在我们的登录工作流程中启用 2FA 身份验证,但我们的一些客户希望禁用 2FA 身份验证。
是否可以通过控制台或使用 Graph api 在用户级别启用/禁用 2FA?我们的想法是,如果可能的话,我们不会将 2FA 身份验证作为登录工作流程的一部分,而是会在用户配置文件级别启用此功能
google-cloud-platform - 来自 Colab 笔记本的 Google 服务帐户的 12 因素身份验证
我需要从 Colab 笔记本中访问我的 Google 服务帐户。目前我有一个私人笔记本
这适用于私人笔记本,但笔记本不能共享。我正在寻找一些类似 12 因素的机制,它可以在 Colab 中像GOOGLE_APPLICATION_CREDENTIALS
在我的本地机器上一样工作。
我希望能够以一种在运行笔记本时透明地使用每个用户自己的服务帐户凭据的方式共享笔记本,最好不必像默认的 Colab 浏览器身份验证那样在浏览器中单击以获取令牌。
我想过将令牌 json 文件存储在 gdrive 中,但这并没有真正帮助。您需要进行身份验证才能挂载 gdrive,并且您希望加载每个用户各自的文件。
python - Django:如何忽略 Celery 的任务?
在不更改代码本身的情况下,有没有办法忽略 Celery 中的任务?
例如,当使用 Django 邮件时,有一个Dummy Backend设置。这是完美的,因为它允许我.env
在某些环境(如测试或暂存)中从文件停用邮件发送。处理邮件发送的代码本身不会被if
语句或装饰器更改。
对于 celery 任务,我知道我可以使用模拟或装饰器在代码中完成它,但我想以一种符合 12factors 的干净方式来完成它,就像使用 Django 邮件一样。任何想法?
编辑解释我为什么要这样做:
这背后的主要动机之一是它在 Django Web 服务器和 Celery 任务之间创建了耦合。例如,在运行单元测试时,如果代理服务器(对我来说是 Redis)没有运行,那么如果delay()
调用方法,它将永远冻结,因为 Celery 尝试向 Redis 发送任务时没有超时。从架构的角度来看,这是非常糟糕的。我希望我的单元测试可以正常运行,而无需运行 Celery 代理!
谢谢!
docker - 如何在 docker 中动态配置应用程序属性文件
我有一个包含 application.properties 文件的 jar 文件。我们可以在运行 docker 镜像时配置 IP 地址和端口号以及用户名和密码吗
属性文件位置
应用程序/bin/config/application.properties
以下是 application.properties
c - 如何将 12 Factor App 应用到 Linux 驱动程序开发中?
我是一名工程师,目前正在开发 Linux 内核模式驱动程序和用户模式驱动程序。当我遇到12 Factor App的理论时,我的大脑周围回荡着一个强烈的声音:“这就是发展的未来!”。
而且我一直想知道如何将这种方法应用于 Linux KMD 和 UMD 设计和开发,因为这个理论过于基于 Web 应用程序(我是一名兼职开源 Web 开发人员)。
当前开发语言:C
当前测试自动化:自定义实现的 Python 测试框架(基于进度,无单元测试)
请给我一些建议。提前感谢和赞赏。
architecture - 依赖隔离意义
我正在阅读12-factor-app 宣言,我现在在依赖项部分。不过,依赖隔离是我无法理解的。
不幸的是,除了 12-factor-apps 应该“在执行期间使用依赖隔离工具以确保没有隐式依赖从周围系统“泄漏”之外,没有给出关于它的实际定义。
在寻找答案时,我只发现有关如何在特定语言/框架中实现依赖隔离的问题。
也许这只是我对英语理解的限制,但是有人可以启发我吗?
config - 如 12 要素应用程序宣言中所述,如何将配置存储在版本中?
12 要素应用宣言的第五个要素是“构建、发布、运行”。它说
发布阶段采用构建阶段生成的构建并将其与部署的当前配置相结合。生成的版本包含构建和配置...
第三个因素“配置”说明配置存储在环境变量中。这对我来说听起来很矛盾。
如果配置存储在环境变量中,它如何包含在发布中?docker 文件是我能想到的唯一可能性,但这将特定于 Docker。
firebase - Firebase RemoteConfig - 不同频道的不同配置
语境:
我正在使用 Angular 前端和 Node.js 快速后端构建一个食谱网站。我正在使用 Heroku 作为后端,并尝试使用 Firebase 作为前端。后端尚未准备好使用,并且不稳定。前端几乎为 v1 做好了准备。目前,我所拥有的只是从 GET /api/recipes 端点检索食谱列表并显示它们(并搜索加载的食谱)的能力。最终,我计划添加通过食谱以及其他端点添加/编辑/删除/搜索的功能。目前,它同样适用于静态 .json 文件或动态 GET 端点。
在把这个加到后端的过程中,后端自然会宕机,有时可能会暂时无法使用,所以我当然要部署两次API,两次部署前端。产品和开发,实时和预览。使用 Heroku 应该很容易,但是 Firebase 给我带来了一些问题。
我想为不同的部署提供不同的配置。前端向 Firebase 询问“我应该使用的 API 在哪里”的一种方式。这不应该进入存储库,代码一次部署很多,yada:https ://12factor.net/codebase 。但我还没有弄清楚如何使用 Firebase 做到这一点。
目标:
Firebase 远程配置应使用 App Channel 等条件,根据部署的通道发送不同的 api_url 参数。这不应该存储在存储库中。它不应该放弃其他部署等。
无论我使用什么配置,都应该是 build-once deploy-many。我不希望传递配置参数,例如configs:{"recipes.web.app":{apiUrl:"..."}, "recipes-preview-1239j20.web.app":{apiUrl:"..."}}
. 前端必须不知道其他部署。它甚至不必知道它的托管位置。
现在的进展:
我成功地将不同版本部署到直播频道和预览频道。我使用 GUI ( ) 成功地进行了 RemoteConfig 配置https://console.firebase.google.com/project/<project_name>/config
。我确实看到了如何添加条件。我在 Angular 的自定义服务中成功访问了 RemoteConfig。我确实发现预览和直播频道上的 init.json 是相同的。我确实成功地将其限制为“如果它是食谱应用程序”,但它没有用,因为一切都是食谱应用程序。有一种方法可以创建多个站点,但这也不是很有用,因为我必须重新设置整个应用程序。
我没有设法弄清楚如何从命令行部署 remoteconfig.template.json。我没有设法弄清楚哪些条件是有用的。我没有设法在条件选择器中启用“版本”条件。我没有找到关于“渠道”的任何条件。即使在同一页面上,我也没有找到任何带有“远程配置”和“频道”的东西!我没有设法在 firebase 文档中找到有关“部署”的任何内容。
替代和不相关的旁注:
我对 Firebase 感到非常沮丧,如果我无法弄清楚这一点,我将放弃它,转而支持我刚刚发现的 Heroku。一个“不受支持”的 nginx 构建包(https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-nginx)。“不受支持”,因为它是非官方的。我对 nginx 很熟悉,使用它会使这个个人项目的一切(除了服务器位置和构建/部署过程)与我在工作中所做的相匹配。而且我个人项目的两半(静态 Web 和 api)都将在同一个主机上,这可能会让事情变得更好。