当我将我的Python Django应用部署到Heroku时。我得到以下错误/构建日志输出。
-----> Building on the Heroku-22 stack
-----> Determining which buildpack to use for this app
-----> Python app detected
-----> No Python version was specified. Using the buildpack default: python-3.11.2
To use a different version, see: https://devcenter.heroku.com/articles/python-runtimes
-----> Installing python-3.11.2
-----> Installing pip 23.0.1, setuptools 63.4.3 and wheel 0.38.4
-----> Installing SQLite3
-----> Installing requirements with pip
Collecting asgiref==3.6.0
Downloading asgiref-3.6.0-py3-none-any.whl (23 kB)
Collecting astroid==2.15.0
Downloading astroid-2.15.0-py3-none-any.whl (277 kB)
Collecting certifi==2022.12.7
Downloading certifi-2022.12.7-py3-none-any.whl (155 kB)
Collecting cffi==1.15.1
Downloading cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (462 kB)
Collecting channels==3.0.4
Downloading channels-3.0.4-py3-none-any.whl (38 kB)
Collecting charset-normalizer==3.1.0
Downloading charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (197 kB)
Collecting config==0.5.1
Downloading config-0.5.1-py2.py3-none-any.whl (20 kB)
Collecting cryptography==39.0.2
Downloading cryptography-39.0.2-cp36-abi3-manylinux_2_28_x86_64.whl (4.2 MB)
Collecting cx-Oracle==8.3.0
Downloading cx_Oracle-8.3.0.tar.gz (363 kB)
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Getting requirements to build wheel: started
Getting requirements to build wheel: finished with status 'done'
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status 'done'
Collecting defusedxml==0.7.1
Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
Collecting dill==0.3.6
Downloading dill-0.3.6-py3-none-any.whl (110 kB)
Collecting Django==4.1.7
Downloading Django-4.1.7-py3-none-any.whl (8.1 MB)
Collecting django-allauth==0.52.0
Downloading django-allauth-0.52.0.tar.gz (728 kB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'done'
Collecting django-environ==0.10.0
Downloading django_environ-0.10.0-py2.py3-none-any.whl (19 kB)
Collecting django-widget-tweaks==1.4.12
Downloading django_widget_tweaks-1.4.12-py3-none-any.whl (8.9 kB)
Collecting humanfriendly==10.0
Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)
Collecting idna==3.4
Downloading idna-3.4-py3-none-any.whl (61 kB)
Collecting isort==5.12.0
Downloading isort-5.12.0-py3-none-any.whl (91 kB)
Collecting lazy-object-proxy==1.9.0
Downloading lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (64 kB)
Collecting mccabe==0.7.0
Downloading mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB)
Collecting oauthlib==3.2.2
Downloading oauthlib-3.2.2-py3-none-any.whl (151 kB)
Collecting oracledb==1.2.2
Downloading oracledb-1.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.0 MB)
Collecting platformdirs==3.1.1
Downloading platformdirs-3.1.1-py3-none-any.whl (14 kB)
Collecting pycparser==2.21
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
Collecting PyJWT==2.6.0
Downloading PyJWT-2.6.0-py3-none-any.whl (20 kB)
Collecting pylint==2.17.0
Downloading pylint-2.17.0-py3-none-any.whl (535 kB)
Collecting pylint-django==2.5.3
Downloading pylint_django-2.5.3-py3-none-any.whl (81 kB)
Collecting pylint-plugin-utils==0.7
Downloading pylint_plugin_utils-0.7-py3-none-any.whl (10 kB)
Collecting python-dotenv==1.0.0
Downloading python_dotenv-1.0.0-py3-none-any.whl (19 kB)
Collecting python-environ==0.4.54
Downloading python-environ-0.4.54.tar.gz (22 kB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'done'
Collecting python3-openid==3.2.0
Downloading python3_openid-3.2.0-py3-none-any.whl (133 kB)
Collecting requests==2.28.2
Downloading requests-2.28.2-py3-none-any.whl (62 kB)
Collecting requests-oauthlib==1.3.1
Downloading requests_oauthlib-1.3.1-py2.py3-none-any.whl (23 kB)
Collecting sqlparse==0.4.3
Downloading sqlparse-0.4.3-py3-none-any.whl (42 kB)
Collecting tomlkit==0.11.6
Downloading tomlkit-0.11.6-py3-none-any.whl (35 kB)
Collecting urllib3==1.26.14
Downloading urllib3-1.26.14-py2.py3-none-any.whl (140 kB)
Collecting wrapt==1.15.0
Downloading wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (78 kB)
Collecting daphne<4,>=3.0
Downloading daphne-3.0.2-py3-none-any.whl (26 kB)
Collecting twisted[tls]>=18.7
Downloading Twisted-22.10.0-py3-none-any.whl (3.1 MB)
Collecting autobahn>=0.18
Downloading autobahn-23.1.2.tar.gz (480 kB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'done'
Collecting txaio>=21.2.1
Downloading txaio-23.1.1-py2.py3-none-any.whl (30 kB)
Collecting hyperlink>=21.0.0
Downloading hyperlink-21.0.0-py2.py3-none-any.whl (74 kB)
Collecting zope.interface>=4.4.2
Downloading zope.interface-6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (249 kB)
Collecting constantly>=15.1
Downloading constantly-15.1.0-py2.py3-none-any.whl (7.9 kB)
Collecting incremental>=21.3.0
Downloading incremental-22.10.0-py2.py3-none-any.whl (16 kB)
Collecting Automat>=0.8.0
Downloading Automat-22.10.0-py2.py3-none-any.whl (26 kB)
Collecting attrs>=19.2.0
Downloading attrs-22.2.0-py3-none-any.whl (60 kB)
Collecting typing-extensions>=3.6.5
Downloading typing_extensions-4.5.0-py3-none-any.whl (27 kB)
Collecting pyopenssl>=21.0.0
Downloading pyOpenSSL-23.1.1-py3-none-any.whl (57 kB)
Collecting service-identity>=18.1.0
Downloading service_identity-21.1.0-py2.py3-none-any.whl (12 kB)
Collecting six
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting pyasn1-modules
Downloading pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting pyasn1
Downloading pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Building wheels for collected packages: cx-Oracle, django-allauth, python-environ, autobahn
Building wheel for cx-Oracle (pyproject.toml): started
Building wheel for cx-Oracle (pyproject.toml): finished with status 'done'
Created wheel for cx-Oracle: filename=cx_Oracle-8.3.0-cp311-cp311-linux_x86_64.whl size=210943 sha256=45e8fd49b82fe4b86643fa8eb0a425d895b0f4b23ef7345407910610694b209d
Stored in directory: /tmp/pip-ephem-wheel-cache-73oja8kp/wheels/e0/41/f9/63e9c4d1ec7b2e8faffc1d6f3219c2e168c306b042d77e2b6f
Building wheel for django-allauth (setup.py): started
Building wheel for django-allauth (setup.py): finished with status 'done'
Created wheel for django-allauth: filename=django_allauth-0.52.0-py3-none-any.whl size=1063914 sha256=1155c2187de4e64fafe4dda0509fd28bd8d687bcb31330b5fe098121df7cf61c
Stored in directory: /tmp/pip-ephem-wheel-cache-73oja8kp/wheels/e1/c8/ca/7e4be574a46605642219627189c7a61527cedbf04f507b0b06
Building wheel for python-environ (setup.py): started
Building wheel for python-environ (setup.py): finished with status 'done'
Created wheel for python-environ: filename=python_environ-0.4.54-py2.py3-none-any.whl size=16341 sha256=4f10b16448a2c82a66813e4e6db5392335f28227c2bd645da32aeea559633242
Stored in directory: /tmp/pip-ephem-wheel-cache-73oja8kp/wheels/98/67/9a/de43dd9ce52d81c220f8382bde233435bd544e8145fc7e49e0
Building wheel for autobahn (setup.py): started
Building wheel for autobahn (setup.py): finished with status 'done'
Created wheel for autobahn: filename=autobahn-23.1.2-py2.py3-none-any.whl size=666855 sha256=b590e20ceaa791e68ddf732bea1289b5f7216e48cf20f362f66003490ae2c65d
Stored in directory: /tmp/pip-ephem-wheel-cache-73oja8kp/wheels/19/4b/71/60bf756ecc15f1aa77a8dd7aca9907d3599a565807c8d52fb7
Successfully built cx-Oracle django-allauth python-environ autobahn
Installing collected packages: python-environ, pyasn1, incremental, cx-Oracle, constantly, config, zope.interface, wrapt, urllib3, typing-extensions, txaio, tomlkit, sqlparse, six, python-dotenv, PyJWT, pycparser, pyasn1-modules, platformdirs, oauthlib, mccabe, lazy-object-proxy, isort, idna, humanfriendly, django-widget-tweaks, django-environ, dill, defusedxml, charset-normalizer, certifi, attrs, asgiref, requests, python3-openid, hyperlink, Django, cffi, Automat, astroid, twisted, requests-oauthlib, pylint, cryptography, service-identity, pyopenssl, pylint-plugin-utils, oracledb, autobahn, pylint-django, django-allauth, daphne, channels
Successfully installed Automat-22.10.0 Django-4.1.7 PyJWT-2.6.0 asgiref-3.6.0 astroid-2.15.0 attrs-22.2.0 autobahn-23.1.2 certifi-2022.12.7 cffi-1.15.1 channels-3.0.4 charset-normalizer-3.1.0 config-0.5.1 constantly-15.1.0 cryptography-39.0.2 cx-Oracle-8.3.0 daphne-3.0.2 defusedxml-0.7.1 dill-0.3.6 django-allauth-0.52.0 django-environ-0.10.0 django-widget-tweaks-1.4.12 humanfriendly-10.0 hyperlink-21.0.0 idna-3.4 incremental-22.10.0 isort-5.12.0 lazy-object-proxy-1.9.0 mccabe-0.7.0 oauthlib-3.2.2 oracledb-1.2.2 platformdirs-3.1.1 pyasn1-0.4.8 pyasn1-modules-0.2.8 pycparser-2.21 pylint-2.17.0 pylint-django-2.5.3 pylint-plugin-utils-0.7 pyopenssl-23.1.1 python-dotenv-1.0.0 python-environ-0.4.54 python3-openid-3.2.0 requests-2.28.2 requests-oauthlib-1.3.1 service-identity-21.1.0 six-1.16.0 sqlparse-0.4.3 tomlkit-0.11.6 twisted-22.10.0 txaio-23.1.1 typing-extensions-4.5.0 urllib3-1.26.14 wrapt-1.15.0 zope.interface-6.0
-----> $ python manage.py collectstatic --noinput
Traceback (most recent call last):
File "/tmp/build_63541e73/manage.py", line 22, in <module>
main()
File "/tmp/build_63541e73/manage.py", line 18, in main
execute_from_command_line(sys.argv)
File "/app/.heroku/python/lib/python3.11/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/app/.heroku/python/lib/python3.11/site-packages/django/core/management/__init__.py", line 386, in execute
settings.INSTALLED_APPS
File "/app/.heroku/python/lib/python3.11/site-packages/django/conf/__init__.py", line 92, in __getattr__
self._setup(name)
File "/app/.heroku/python/lib/python3.11/site-packages/django/conf/__init__.py", line 79, in _setup
self._wrapped = Settings(settings_module)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.heroku/python/lib/python3.11/site-packages/django/conf/__init__.py", line 190, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/.heroku/python/lib/python3.11/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 940, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/tmp/build_63541e73/config/settings.py", line 20, in <module>
oracledb.init_oracle_client(
File "src/oracledb/impl/thick/utils.pyx", line 455, in oracledb.thick_impl.init_oracle_client
File "src/oracledb/impl/thick/utils.pyx", line 479, in oracledb.thick_impl.init_oracle_client
File "src/oracledb/impl/thick/utils.pyx", line 400, in oracledb.thick_impl._raise_from_info
oracledb.exceptions.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://python-oracledb.readthedocs.io/en//latest/user_guide/initialization.html#setting-the-oracle-client-library-directory for help
! Error while running '$ python manage.py collectstatic --noinput'.
See traceback above for details.
You may need to update application code to resolve this error.
Or, you can disable collectstatic for this application:
$ heroku config:set DISABLE_COLLECTSTATIC=1
https://devcenter.heroku.com/articles/django-assets
! Push rejected, failed to compile Python app.
! Push failed
显然,这是因为Oracle Instant Client库没有与应用程序一起部署。
我的问题是如何修改我的应用程序,使其能够部署在Heroku上并能够连接到我的Oracle云数据库?
我会提供所有需要的文件,我只是不知道什么是需要解决的问题atm。
Oracle和Heroku似乎都没有足够的文档来解决这个问题。
1条答案
按热度按时间k4emjkb11#
我看到你正在使用Heroku-22堆栈,看起来像是Ubuntu 22.04 LTS。参见https://devcenter.heroku.com/articles/stack
我们最近构建了一个django -> Oracle ADB docker容器(在Oracle Linux 8上),因此必须在容器构建时安装以下包,以使db客户端为我们的应用程序工作:
对于OL 8,我们使用:
我们跟随这个文档获取背景信息:https://docs.oracle.com/en/database/oracle/oracle-database/21/lacli/install-instant-client-using-rpm.html#GUID-2E81E2AE-E94C-413F-99B2-AE9A3949F05D
我会为您的堆栈选择相关的包管理器,然后尝试在构建时安装上述包。如果没有兼容的软件包管理器,那么您可能需要下载zip并以这种方式安装:https://docs.oracle.com/en/database/oracle/oracle-database/21/lacli/install-instant-client-using-zip.html#GUID-D3DCB4FB-D3CA-4C25-BE48-3A1FB5A22E84
此外,你的settings.py文件需要如下内容,以便django应用程序初始化连接: