【问题标题】:Creating an app on Heroku with Django and NPM使用 Django 和 NPM 在 Heroku 上创建应用程序
【发布时间】:2012-03-11 23:28:27
【问题描述】:

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

现在我想在 Heroku 上部署这个应用程序。我无法将 npm 放入我的 requirements.txt,所以我想知道如何在 Heroku 服务器上获取 npm?

【问题讨论】:

    标签: django heroku coffeescript npm


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      注意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 
        

      【讨论】:

      • 哇,太棒了!你有同样的问题吗?
      • @alexis 是的 - 我也可以添加对 gems 的支持,但目前我不需要任何 :)
      • 谢谢。我使用了您的 buildpack,它运行良好。非常感谢!!我真的很感激它,我相信很多其他人也会觉得它很有帮助!
      • 您好!当我第一次用它构建另一个项目时,我非常喜欢 buildpack 包!但是,当我启动应用程序时,它会崩溃。我正在查看日志,上面写着ImportError: No module named site。我在INSTALLED_APPSSITE_ID = 1 中有'django.contrib.sites'stackoverflow.com/questions/11596710/…。然后我做了一个 Hello World 类型的应用程序,但得到了同样的错误。你知道这可能是什么原因吗? heroku 那边有什么变化吗?
      • Fewwww,我想如果在bin\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 之前。但这不起作用。
      【解决方案3】:

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

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

      此解决方案与 Jiaaro 的解决方案有以下不同:

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

      【讨论】:

      • 像冠军一样工作! +1 避免使用自定义构建包,因为根据我的经验和 Alex-zak 的经验,Jiaaro 似乎不再适用。
      【解决方案4】:

      @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】:

        如果您想避免维护自定义构建包,可以使用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

        【讨论】:

        【解决方案6】:

        Heroku 领域的情况发生了变化

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

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

        也不需要 gunt 任务、django-bower 等应用程序或其他占用服务器资源并减慢构建时间的专用工具。

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

        【讨论】:

          猜你喜欢
          • 2017-09-28
          • 1970-01-01
          • 2015-09-08
          • 2014-03-31
          • 2012-01-02
          • 2013-07-02
          • 1970-01-01
          • 2015-06-30
          • 1970-01-01
          相关资源
          最近更新 更多