使用Django和NPM在Heroku上创建应用程序

时间:2012-02-21 16:26:41

标签: django heroku coffeescript npm

我正在编写一个包含一些CoffeeScript的Django应用程序。为了实现这个目的,我使用了django-compressor,它在应用程序启动之前将CoffeeScript编译为JS。 django-compressor要求在机器上安装NPM来编译CoffeeScript。

现在我想在Heroku上部署这个应用程序。我不能把npm放在requirements.txt中,所以我想知道如何在Heroku服务器上获取npm?

6 个答案:

答案 0 :(得分:33)

如果您想避免维护自定义构建包,可以使用multi buildpack

使用multi buildpack非常简单:

  1. 运行heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
  2. 使用两行在存储库的根目录中创建.buildpacks文件: https://github.com/heroku/heroku-buildpack-nodejs.git
    https://github.com/heroku/heroku-buildpack-python.git
  3. 使用您的npm依赖项创建package.json文件。
  4. 运行npm install

答案 1 :(得分:19)

注意multi buildpack是目前实现这一目标的更好方法:)


我已经创建了官方Python heroku buildpack的一个分支,它允许一个可选的npm_requirements.txt来安装这样的依赖项。

我现在在heroku上使用coffeescript和less-css与django-compressor:)

https://github.com/jiaaro/heroku-buildpack-django

编辑:从标准buildpack切换到我的buildback:

  1. 使用heroku命令行应用设置BUILDPACK_URL环境变量:

    heroku config:add BUILDPACK_URL=git://github.com/jiaaro/heroku-buildpack-django.git 
    

答案 2 :(得分:3)

您可以创建自己的buildpack,混合nodejs buildbpackpython buildpack。或者在您的机器上编译CoffeeScript并将其放在S3上。

答案 3 :(得分:3)

我在Google中发现了这个问题,同时为自己解决了同样的问题。 我合并了两个官方构建包(python和nodejs),所以现在可以通过运行此命令来使用标准npm-description文件package.json的Django项目:

heroku config:add BUILDPACK_URL=https://github.com/podshumok/heroku-buildpack-python

此解决方案与Jiaaro的解决方案不同:

  • 它基于较新的(12月12日)版本的buildpacks(例如,它在部署时运行collectstatic)
  • 您需要正确的package.json文件(至少应在此文件中指定产品的名称和版本)
  • npm依赖项应列在package.json

答案 4 :(得分:3)

@Jiaaro的解决方案对我不起作用......导致一些奇怪的错误...... /:

File "almalinks/manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management

太累了无法处理它,所以我环顾四周,找到了这个漂亮的资源:
- The heroku-django cookbook

他们解释了如何添加自己的脚本,这些脚本挂钩到heroku的默认构建包中 工作就像一个魅力。 :)

答案 5 :(得分:1)

Heroku土地上的情况发生了变化

不需要多个构建包,.builpack文件或自定义构建包。只需将所需的官方heroku构建包添加到您的heroku应用程序中,它们将按输入的顺序执行。使用index选项根据需要对它们重新排序。

heroku buildpacks:add --index 1 heroku/nodejs -a your_app_name

也不需要gunt任务,像django-bower这样的应用程序,或其他需要占用服务器资源并缩短构建时间的专用工具。

您可以查看我的教程,了解如何无缝集成Django + Bower + Heroku here