Heroku 技术细节

Posted

技术标签:

【中文标题】Heroku 技术细节【英文标题】:Heroku Technical Details 【发布时间】:2014-10-31 15:55:19 【问题描述】:

Heroku 运行的 VM 有哪些规格?我的一个二进制可执行文件无法运行(在我的计算机上运行良好),我认为这可能是由于技术不匹配造成的。

当我在我的可执行文件上运行file 时,我得到Mach-O 64-bit executable x86_64

Heroku 是否使用具有 x86 架构的 64 位机器? 他们使用什么样的 nix? 如果 (C++) 可执行文件在我的应用程序本地运行良好,但在 Heroku 本身上却不能正常运行,还有什么其他原因?

我得到的错误是胡言乱语:

2014-09-07T04:38:32.909511+00:00 app[web.1]: ./process: 1: �����#�
                                                                  ��!H__PAGEZERO�__TEXT�__text__TEXT�a�d�a�__stubs__TEXT: not found
2014-09-07T04:38:32.909519+00:00 app[web.1]: ./process: 3: Syntax error: "(" unexpected
2014-09-07T04:38:32.909521+00:00 app[web.1]:
2014-09-07T04:38:32.909517+00:00 app[web.1]: ./process: 2: ��: not found

【问题讨论】:

uname -a 产生Linux ba17bfc1-7112-4859-a6a9-b33b6fff8eea 3.8.11-ec2 #6 SMP Tue Jul 22 22:02:15 UTC 2014 x86_64 GNU/Linux 那么问题出在哪里? 【参考方案1】:

Heroku 应用程序部署在基于 64 位 Ubuntu 10.04 的 Cedar Stack 上。新的 Cedar-14 堆栈基于 Ubuntu 14.04。

通过部署一个简单的 Node.js 应用并使用heroku run bash,我们可以检查实时环境:

$ heroku run bash
Running `bash` attached to terminal... up, run.2785

~ $ which node
/app/vendor/node/bin/node

~ $ file /app/vendor/node/bin/node
/app/vendor/node/bin/node: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

~ $ uname -a
Linux 9cf0ac66-9131-4a19-8f4a-f4a132cf3db8 3.8.11-ec2 #6 SMP Tue Jul 22 22:02:15 UTC 2014 x86_64 GNU/Linux

请务必注意,Heroku 并非旨在运行预编译的可执行文件。相反,它旨在将您的应用程序编译为Heroku Buildpacks 构建阶段的一部分。

有关更多详细信息,请查看The Twelve Factor App 的“构建、发布、运行”部分——这是使用 Heroku 等 PaaS 时必须遵循的一组应用程序最佳实践。

【讨论】:

以上是关于Heroku 技术细节的主要内容,如果未能解决你的问题,请参考以下文章

“我是技术总监,我确实答不出那么多技术细节”

深入解读Service Mesh背后的技术细节

zookeeper 临时节点技术细节备注

你也认为技术总监应懂技术细节,那就有些可悲了

SQL-技术在于细节 BETWEEN AND的用法

每日一记--技术小细节