我正在编写一个包含 CoffeeScript 的 Django 应用。为了实现这一点,我使用 django-compressor 来在启动应用之前将 CoffeeScript 编译为 JS。django-compressor 要求安装 NPM 才能编译 CoffeeScript。
现在我想在 Heroku 上部署此应用程序。我不能把 npm 放在我的 requirements.txt
文件中,所以我想知道如何在 Heroku 服务器上获取 npm?
我正在编写一个包含 CoffeeScript 的 Django 应用。为了实现这一点,我使用 django-compressor 来在启动应用之前将 CoffeeScript 编译为 JS。django-compressor 要求安装 NPM 才能编译 CoffeeScript。
现在我想在 Heroku 上部署此应用程序。我不能把 npm 放在我的 requirements.txt
文件中,所以我想知道如何在 Heroku 服务器上获取 npm?
如果您想避免维护自定义的构建包,可以使用多重构建包。
使用多重构建包非常简单:
heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
https://github.com/heroku/heroku-buildpack-nodejs.git
https://github.com/heroku/heroku-buildpack-python.git
npm install
注意:如今多重构建包是实现此目的的更好方式 :)
我创建了一个 Python 官方 heroku buildpack 的 fork,它允许使用可选的 npm_requirements.txt
文件来安装这些依赖项。
我现在正在使用 coffeescript 和 less-css 以及 django-compressor 在 heroku 上进行开发 :)
https://github.com/jiaaro/heroku-buildpack-django
编辑:要从标准 buildpack 切换到我的 buildpack:
使用 heroku
命令行应用程序设置 BUILDPACK_URL
环境变量:
heroku config:add BUILDPACK_URL=git://github.com/jiaaro/heroku-buildpack-django.git
INSTALLED_APPS
中有'django.contrib.sites'
和SITE_ID = 1
,就像https://dev59.com/3GbWa4cB1Zd3GeqPWGPp中所述。然后我创建了一个Hello World类型的应用程序,但是得到了相同的错误。你知道可能是什么原因吗?Heroku那边是否有任何更改? - Alexisbin\release
中将python $PROJECT/manage.py runserver 0.0.0.0:\$PORT --noreload
更改为python manage.py runserver 0.0.0.0:\$PORT --noreload
,事情就会变得好起来!看起来Heroku改变了一些东西,因为你之前的东西是可以工作的。我添加了一个Procfile来做这个,并且事情开始不再抛出错误 :) 另外,使用buildpack更新存储库不起作用。之前我是这样做的:$ heroku create
然后更新,然后heroku config:add BUILDPACK_URL=http://github.com/jiaaro/heroku-buildpack-django.git
。但这并没有起作用。 - Alexisheroku create --stack cedar --buildpack http://github.com/jiaaro/heroku-buildpack-django.git
。再次感谢 Jiaaro 提供的优秀代码。希望这对其他人有所帮助,或者您可以友好地更新它 :) - Alexis我在解决自己的问题时在谷歌上发现了这个问题。
我合并了两个官方构建包(python和nodejs),因此现在可以通过运行以下命令拥有带有标准npm描述文件package.json
的Django项目:
heroku config:add BUILDPACK_URL=https://github.com/podshumok/heroku-buildpack-python
package.json
文件(至少应在此文件中指定产品的名称和版本) package.json
中列出File "almalinks/manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
我太累了,不想处理它,所以我四处寻找,发现了这个好用的资源:
- Heroku-Django手册
他们解释了如何添加自己的脚本,以便与Heroku的默认构建包配合使用。
非常好用。 :)
Heroku 领域的事情已经发生了改变
不再需要多个构建包、.buildpack 文件或自定义构建包。只需将所需的官方 Heroku 构建包添加到您的 Heroku 应用程序中,它们将按照输入顺序执行。使用索引选项按需要重新排序。
heroku buildpacks:add --index 1 heroku/nodejs -a your_app_name