我的基本问题:如何将我的魔豆弹性期间设置的环境变量将生效部署流程?环境变量部署
我不是在谈论部署在部署后,这将是我的应用程序可以访问期间设置环境变量,我想设置环境变量,将修改弹性青苗的构建脚本的特定行为。
要清楚 - 我一般认为这是一个坏主意,但所以我要把这一点作为一个实验可能是在这种情况下确定。这里有一些关于为什么我正在研究这个问题的背景,以及为什么我认为它可能是正确的:
我正在将服务器从美国的AWS转移到中国的AWS,并且发现部署了服务器在50%〜100%的时间内失败,这取决于当天。这是发展过程中的一大痛苦,但我主要关心我将如何在生产中完成这项工作。
这是一台运行Python 2.7的亚马逊Linux服务器,并且日志表明这些故障主要是读取超时错误,有几次连接重置被同层次抛出,全部由pip安装生成,同时尝试从pypi下载软件包。为了验证这一点,我已经对我的实例进行了手动安装一些软件包,并在小样本大小看到类似的失败率。请注意,在尝试访问中国GFW另一端的内容时,这种情况非常普遍。
所以,我写了一个脚本,PIP下载 S上的包我的本地机器,然后AWS同步他们s到位于同一区域作为我的服务器的S3桶。这将消除在部署时跨越GFW的需要。我原来的计划是在S3中添加一个.ebextension到pip缓存,但是(除非我遗漏了某些东西),这有点令人惊讶地看起来并不直截了当。
所以,作为B计划,我重定向到包上的实例的本地目录。这是行之有效的,但我不能得到pip安装拉本地目录的软件包,而不是从pypi下载软件包。
继PIP文档,我预计PIP_FIND_LINKS环境变量指向我的包目录将具有画中画“自然地”从我的目录拉包,而不是的PyPI。这会使这个变更对EB构建脚本透明,为什么我认为这可能是一个合理的解决方案。
到目前为止我曾尝试:
1)命令其中出口PIP_FIND_LINKS = /路径/到/包,没有运气。我认为这是由于部署步骤从不同的会话中调用,所以然后我尝试:
2)命令其中(除了前面的出口)追加出口PIP_FIND_LINKS = /路径/要/包到〜。/ profile,试图让这适用于任何新的会话。
我试图通过发行两ec2_user和根,既不工作的命令。
与此同时,我希望有一些对EB,pip等细微差别更有经验的人可能能够提供一些指导。
哪个pypi库是问题的根源?有时我的requirements.txt包含一个不在pypi上但通过setup()从repo安装的库。这在部署中触发了失败。我的解决方案是修复需求并使用docker环境,以便更好地控制部署脚本。 –
失败的库因运行而异,有时也没有失败。这看起来似乎与随机连接阻塞相关,在穿越GFW时这是相当常见的,为什么我想在本地存储我的依赖关系。我也应该提到,这个需求文件的超集在中国以外的地方使用了一年多没有问题。 – gary