Heroku 部署和 pyodbc

Posted

技术标签:

【中文标题】Heroku 部署和 pyodbc【英文标题】:Heroku deployment and pyodbc 【发布时间】:2021-05-31 20:27:35 【问题描述】:

好的,我已经尝试在 Heroku 上部署几天了。我什至无法在 Heroku 上升级我的帐户来询问如何解决这个问题。

我的计算机上有一个功能齐全的模拟 Django 项目。我最初使用 PythonAnywhere 并喜欢它。直到我意识到 Braintree 不起作用并且我无法加载 php,它太受限制了。我确实对他们有意见。

所以我搬到了 Heroku。 Heroku 的问题是我什至无法将其加载到网站上。我把它挂在了我的 GitHub 上。现在我无法加载它,因为它拒绝构建,因为 pyodbc 不会加载。我知道这是由sql.h not found when installing PyODBC on Heroku 显示的。我正在开始一个新话题,因为它比较老。话虽如此,我在这里尝试了一切。

我认为部分问题是我没有对其中任何一个的 sudo 访问权限。我尝试使用 su 帐户登录我的帐户密码,但显然我们没有该访问权限。我尝试在 Heroku 上构建包,但它们似乎不想为 pyodbc 库工作。我也在考虑在 Heroku 上添加一个插件,但是我仍然需要更改很多代码。

有没有一种傻瓜方法来解决这个问题?做了多年程序员的姐姐,也不能让它工作。那么新来的我就不行了。所以我们之间有很大的频谱经验。抱歉,我花了 40 多个小时试图部署它。

Running setup.py install for pyodbc: started
           Running setup.py install for pyodbc: finished with status 'error'
           ERROR: Command errored out with exit status 1:
            command: /app/.heroku/python/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ni8r2oow/pyodbc/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ni8r2oow/pyodbc/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-nkt15se7/install-record.txt --single-version-externally-managed --compile --install-headers /app/.heroku/python/include/python3.9/pyodbc
                cwd: /tmp/pip-install-ni8r2oow/pyodbc/
           Complete output (14 lines):
           running install
           running build
           running build_ext
           building 'pyodbc' extension
           creating build
           creating build/temp.linux-x86_64-3.9
           creating build/temp.linux-x86_64-3.9/src
           gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DPYODBC_VERSION=4.0.30 -I/app/.heroku/python/include/python3.9 -c src/buffer.cpp -o build/temp.linux-x86_64-3.9/src/buffer.o -Wno-write-strings
           In file included from src/buffer.cpp:12:
           src/pyodbc.h:56:10: fatal error: sql.h: No such file or directory
              56 | #include <sql.h>
                 |          ^~~~~~~
           compilation terminated.
           error: command '/usr/bin/gcc' failed with exit code 1
           ----------------------------------------
       ERROR: Command errored out with exit status 1: /app/.heroku/python/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-ni8r2oow/pyodbc/setup.py'"'"'; __file__='"'"'/tmp/pip-install-ni8r2oow/pyodbc/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-nkt15se7/install-record.txt --single-version-externally-managed --compile --install-headers /app/.heroku/python/include/python3.9/pyodbc Check the logs for full command output.
 !     Push rejected, failed to compile Python app.
 !     Push failed

【问题讨论】:

【参考方案1】:

您需要使用 Heroku buildpack 安装它:

https://elements.heroku.com/buildpacks/matt-bertoncello/python-pyodbc-buildpack

这将为您提供 pyodbc 和 django-pyodbc 所需的 Linux 基础 MSODBC 驱动程序。

【讨论】:

所以我这样做了,但始终无法让它工作。虽然我可能做错了。 heroku buildpacks:添加 heroku-community/apt -a momandpops heroku buildpacks:添加 heroku/python -a momandpops heroku buildpacks:添加github.com/matt-bertoncello/python-pyodbc-buildpack.git -a momandpops。是我使用的命令。这是不正确的吗? 是否有更好的文档来说明如何实现这一点?也许我们做错了? 好的,所以我对如何制作 buildpack 感到非常困惑。我以为这是一个文件夹,里面有文件。它不是。您使用记事本++ 在根目录中创建APT 文件,将提到的项目放在文本中。然后将其另存为 APT 并且没有扩展名。

以上是关于Heroku 部署和 pyodbc的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 部署和 pyodbc

在 Heroku 上部署 React 和 Django

在 Heroku 上部署 asgi 和 wsgi

加快 Heroku 上的部署 [重复]

MongoDB 和 Heroku 部署

将微服务节点 js 应用程序部署到 heroku