سؤال

I'm writing a Django app that includes some CoffeeScript in it. To allow for this I'm using django-compressor which compiles the CoffeeScript to JS before the app is launched. django-compressor requires that NPM is installed on the machine to compile the CoffeeScript.

Now I want to deploy this app on Heroku. I can't put npm in my requirements.txt so I am wondering how I can get npm on the Heroku server?

هل كانت مفيدة؟

المحلول

Note: The multi buildpack is a much nicer way to accomplish this these days :)


I've created a fork of the official Python heroku buildpack that allows an optional npm_requirements.txt for installing such dependencies.

I am now using coffeescript and less-css with django-compressor on heroku :)

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

Edit: To switch to my buildback from the standard buildpack:

  1. use the heroku command line app to set the BUILDPACK_URL environment variable:

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

نصائح أخرى

If you want to avoid maintaining a custom buildpack, you can use the multi buildpack.

Using the multi buildpack is super simple:

  1. Run heroku config:add BUILDPACK_URL=https://github.com/ddollar/heroku-buildpack-multi.git
  2. Create a .buildpacks file in the root of your repository with two lines: https://github.com/heroku/heroku-buildpack-nodejs.git
    https://github.com/heroku/heroku-buildpack-python.git
  3. Create a package.json file with your npm dependencies.
  4. Run npm install

You can create your own buildpack, that mix nodejs buildbpack and python buildpack. Or compile your CoffeeScript on your machine and put it on S3.

I found this question in Google while solving the same problem for myself. I merged two official buildpacks (python and nodejs), so now one can have Django project with standard npm-description file package.json by running this command:

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

This solution differs from Jiaaro's one in the following:

  • it is based on the newer (dec 12) versions of buildpacks (for example, it runs collectstatic on deployment)
  • you need correct package.json file (at least name and version of your product should be specified in this file)
  • npm dependencies should be listed in package.json

@Jiaaro 's solution didn't work for me... Causes some weird error... /:

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

Was too tired to deal with it, so I looked around and I found this nifty resource:
- The heroku-django cookbook

They explain how you can add your own scripts that hook into heroku's default buildpacks.
Worked like a charm. :)

Things have changed in Heroku land

There is no need for multi build packs, .builpack files, or custom build packs. Simply add the required official heroku build packs to your heroku app and they will execute in the order entered. Use the index option to reorder them as required.

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

There is also no need for, gunt tasks, apps like django-bower, or other specialized tools that take up server resources and slow build time.

You can check out my tutorial on how to seamlessly integrate Django + Bower + Heroku here.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top