- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的问题和How do I install in-house requirements for Python Heroku projects?一模一样和 How to customize pip's requirements.txt in Heroku on deployment? .也就是说,我有一个私有(private)存储库,我需要从中将 Python 依赖项安装到我的 Heroku 应用程序中。 canonical answer , 由 Heroku 自己给出 Kenneth Reitz , 就是放一些类似的东西
-e git+https://username:password@github.com/kennethreitz/requests.git@v0.10.0#egg=requests
在您的 requirements.txt
文件中。
我的安全需求阻止我将密码存储在存储库中。(我也不想将依赖项放入我的应用程序的存储库中;它们是独立的软件,需要单独存放 repo 。)我可以将我的密码(或者,最好是 GitHub OAuth token 或部署 key )提供给 Heroku 的唯一地方是在环境变量中,例如
heroku config:add GITHUB_OAUTH_TOKEN=12312312312313
我可以在我的应用程序的存储库中使用自定义的 .profile
,但随后我将每次下载并安装我的依赖项一个进程(web、worker 等) ) 重新启动。
这样就可以使用自定义构建包和 Heroku Labs addon在 buildpack 编译之前公开我的 heroku config
环境。我试过 building one在 Buildpack Multi 之上.这个想法是 Buildpack Multi 是主要的构建包,并使用我应用程序存储库中的 .buildpacks
文件,它首先下载普通的 Heroku Python 构建包,然后是我的自定义构建包。
即使在 Buildpack Multi 成功运行 Python buildpack 之后,问题仍然存在,Python binary and Pip package are not visible一旦 Buildpack Multi 运行,到我的 buildpack。所以自定义 buildpack 完全失败了。 (在我的测试中,GITHUB_OAUTH_TOKEN
环境变量已正确暴露给构建包。)
我唯一想尝试的另一件事是制作我自己的 Python buildpack 分支,当它从 requirements.txt
安装所有内容时安装我的依赖项,甚至重写 requirements。 txt
直接。对于我认为非常普遍的问题,这两个看起来都是非常繁重的解决方案。
我的自定义 buildpack(上面链接)现在下载我的闭源依赖项(“foo”)并将其保存到 geos buildpack 使用的供应商目录中。我将 foo 本身对我的应用程序的 requirements.txt
的依赖项提交到我的应用程序中。因此,Pip 通过我的应用程序的 requirements.txt
安装 foo 的依赖项,buildpack 将 foo 的销售副本添加到我的应用程序环境的 PYTHONPATH
(因此 foo 的 setup.py install
从不运行)。
这种方法的最大问题是将我的(诚然写得不好的)buildpack 与我的应用程序耦合在一起。第二个问题是我的应用程序的 requirements.txt
应该只将 foo 列为依赖项并将 foo 的依赖项留给 foo 来确定。最后,如果我忘记设置我的 GITHUB_OAUTH_TOKEN 环境变量(或者,如果 token 过期,环境变量仍然存在但不再有效。
我错过了什么(很明显)的东西?你是如何在你的应用程序中解决这个问题的?关于让我的构建包正常工作有什么建议,或者希望有更简单的解决方案?
最佳答案
我创建了一个构建包来使用存储为环境变量的自定义 ssh key 来解决这个问题。由于 buildpack 与技术无关,因此它可用于使用任何工具下载依赖项,例如用于 php 的 composer、用于 ruby 的 bundler、用于 javascript 的 npm 等:https://github.com/simon0191/custom-ssh-key-buildpack
将构建包添加到您的应用:
$ heroku buildpacks:add --index 1 https://github.com/simon0191/custom-ssh-key-buildpack
生成一个新的 SSH key (假设您将其命名为 deploy_key)
将公钥添加到您的私有(private)存储库帐户。例如:
将私钥编码为 base64 字符串并将其添加为 heroku 应用的 CUSTOM_SSH_KEY
环境变量。
为应该使用 ssh key 的主机制作一个逗号分隔列表,并将其添加为 heroku 应用程序的 CUSTOM_SSH_KEY_HOSTS
环境变量。
# MacOS
$ heroku config:set CUSTOM_SSH_KEY=$(base64 --input ~/.ssh/deploy_key) CUSTOM_SSH_KEY_HOSTS=bitbucket.org,github.com
# Ubuntu
$ heroku config:set CUSTOM_SSH_KEY=$(base64 ~/.ssh/deploy_key) CUSTOM_SSH_KEY_HOSTS=bitbucket.org,github.com
关于python - Heroku:私有(private)存储库中的 Python 依赖项而不存储我的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21297755/
任何人都知道如何将内容从一个 Magnolia CMS 存储库(Jackrabbit 存储库)传输/迁移到我们的应用程序使用的另一个自定义 jacrabbit 存储库? 最佳答案 正如另一张海报所建议
Git 是否支持任何允许我直接从本地/工作树提交到远程存储库的命令?正常的工作流程至少需要一个“git add”来用文件内容的副本等填充对象数据库。 我知道这不是正常的、预期的 Git 工作流程。但我
我们正在将 Git 存储库移动到新服务器。迁移后我们显然可以只删除旧的存储库,所以当人们尝试推送或 pull 时他们会得到一个错误并在 wiki 上查找新的存储库 URL,但是是否有可能阻止 pull
我们有两个 Subversion 存储库,每个存储库都有一个项目。所以: svn://server/svn/project_a svn://server/svn/project_b 它们是独立的项目,
使用 maven/tycho 构建 Nodeclipse Eclipse 插件每个版本都有新的 p2 存储库。 发布是在 Bintray 上完成的不允许更新文件。所以每个版本都在它的文件夹中。 Bas
这听起来有点复杂,让我解释一下: Project_A 在它自己的 Mercurial 存储库中已经存在了一段时间。 Project_A 现在被 merge 到一个新的 super 项目 Super-P
这听起来有点复杂,所以让我解释一下: Project_A 已在其自己的 Mercurial 存储库中存在了一段时间。 Project_A 现在正在 merge 到一个新的 super 项目 Super
我想将我的所有文件从 Git Repo A 移动到 Git Repo B 并具有完整的历史记录。 Git B 已经包含另一个项目文件。我尝试了几种方法,例如 How to move files fro
我从 github 中托管的公共(public) git 存储库创建了一个裸存储库 (MY_LOCAL_REP): ~$ git clone --bare github 存储库已更新(创建了一个分支
工作 SVN 库 我正在启动一个 git 存储库来与 svn 存储库进行交互。 svn 存储库已设置并且工作正常,其中包含一个基本 README 文件的单次提交。 检查它工作正常: tchalvak:
我正在使用 spring boot 1.5.2 和 spring boot data redis 1.8。 我有两个@Id 注解,一个用于JPA,另一个用于redis hash。这里我想使用 JPA
我是 maven 的新手。我仍然无法理解它的概念。 例如,我正在寻找 com.extjs:gxt:jar:2.2.5 或 org.syslog4j:syslog4j:jar:0.9.46。我在任何 r
我已经阅读了很多关于存储库模式和服务层的作用的书,我(我认为)很清楚这两者之间的区别。但是现在有一个简单的问题让我挠头了一段时间。 我知道数据访问层如何负责...访问数据,因此典型的存储库可能具有插入
我是 Git/Smartgit 的新手。现在我不得不在 WIN 10 下配置一台新 PC。请问我如何将设置和存储库从旧 PC 导出/导入到新 PC? 非常感谢,问候, 本德 最佳答案 SmartGit
所以我最近开始在我的工作项目中使用存储库模式。我一直遇到同样的问题,我似乎无法找到答案: 可以将另一个存储库注入(inject)现有存储库吗?这样做有什么负面影响? 例如 : class Crawls
我有一个应用程序容器推送到 gitlab 容器注册表。我正在尝试将其作为容器部署到 azure web 应用程序服务中。我根据azure的文档尽我所能地进行了配置。但我不明白我错过了什么,因为 azu
我使用java框架来开发crud应用程序。这个框架被称为:“Cuba.Platform”。 我的问题是,我无法在古巴打开该项目。当我尝试在那里打开我的项目时,我遇到了这个问题: “存储库包含 http
我在我的数据层中有几个对数据库执行 CRUD 操作的存储库类。我不确定这种设计,因为大多数表都需要每个存储库一个专用类,一段时间后我最终会为数据库中存在的每个表得到很多存储库。我这样做是因为,当然,我
我正在重构一些代码,并将一些执行数据库 CRUD 操作的方法提取到它们自己的存储库类中。 我有几个问题,鉴于以下两种类型的对象存储在数据库中:用户和角色 我应该创建 IUserRepository 和
尝试在这里创建一个非常简单的存储库和服务层模式。 (.NET 4、C#、LINQ,尽管这个问题部分与语言无关)。注意:这只是研发。 我的目标是尽量减少服务层中方法定义的数量。 这是我的存储合约: in
我是一名优秀的程序员,十分优秀!