Трубопровод Django, Heroku и SASS
Я пытался получить django-трубопровод настройка, чтобы я мог компилировать и объединять свои активы. Я также хотел бы удалить скомпилированные css-файлы из моего репозитория, чтобы избежать конфликтов слияния в запросах pull.
Я пытался заставить django-pipeline скомпилировать файлы как часть процесса развертывания, но не могу понять это. Я использую SASS для написания CSS. Мои настройки конвейера выглядят следующим образом:
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_CSS = {
'main': {
'source_filenames': (
'sass/blah.scss',
'sass/main.scss',
),
'output_filename': 'css/main.css',
'extra_context': {
'media': 'screen',
},
},
}
PIPELINE_COMPILERS = (
'pipeline.compilers.sass.SASSCompiler',
)
это отлично работает локально и генерирует .css файлы в папке my /sass, которые затем объединяются, чтобы сделать основной.файл CSS. Если я проверю эти CSS-файлы в своем репозитории git и нажму на Heroku, он также отлично работает. Однако, если я игнорирую их, что я хотел бы сделать, чтобы я не фиксировал скомпилированные файлы, то django-pipeline не может найти файлы для объединения. Я не уверен, как я могу заставить компиляцию sass работать над Heroku, и я ничего не могу найти об этом.
Я могу предоставить больше информации о моей настройке, если это необходимо, надеюсь, кто-нибудь знает об этом!
3 ответов
хорошо, вот как я получил эту работу, используя компас для компиляции моих файлов SASS.
- используйте несколько Heroku buildpacks -Heroku Buildpack Multi
-
поместите следующее в свой .buildpacks файл
https://github.com/heroku/heroku-buildpack-ruby.git https://github.com/heroku/heroku-buildpack-nodejs https://github.com/heroku/heroku-buildpack-python.git
-
создайте Gemfile с компасом и любыми другими требованиями, которые у вас есть. Вот мой:
source 'https://rubygems.org' ruby '1.9.3' gem 'bootstrap-sass' gem 'compass'
-
создать конфиг.файл rb. Вот мой. Как видите это требует bootstrap-sass, который я включил в свой Gemfile:
# Require any additional compass plugins here. require 'bootstrap-sass' # Set this to the root of your project when deployed: http_path = "/" css_dir = "app_folder/static/css" sass_dir = "app_folder/static/sass" images_dir = "app_folder/static/images" output_style = :compact
-
установить пакеты узлов (django-pipeline хочет yuglify). Вам понадобится посылка.файл json:
{ "dependencies": { "yuglify": "0.1.4" }, "engines": { "node": "0.10.x", "npm": "1.3.x" }, "repository": { "type": "git", "url": "your repo url" } }
- почти готов...
-
когда Heroku запускает ruby buildpack, он будет искать задачу rake под названием assets:precompile. Так что теперь вам нужно добавить Rakefile с следующий:
namespace 'assets' do desc 'Updates the stylesheets generated by Sass/Compass' task :precompile do print %x(compass compile --time) end end
это позволит скомпилировать ваш код. Вам нужно убедиться, что вы установили вывод (назад в config.rb) в то место, где django-pipeline ищет CSS-файлы (показано в исходном вопросе).
-
вы должны избавиться от этой части в исходном вопросе, поскольку django-pipeline не компилирует ваш SASS для вас:
PIPELINE_COMPILERS = ( 'pipeline.compilers.sass.SASSCompiler', )
это должно быть оно! Развертывания должны просто работать сейчас, и это действительно не добавило значительное количество времени на процесс развертывания.
в целом, это составляет много настроек, но для меня это того стоило, так как мне больше не нужно фиксировать скомпилированные файлы в репозиторий, что вызывало много конфликтов слияния при работе с ветвями и запросами на вытягивание.
Я хотел бы выяснить, как это сделать, используя только два buildpacks (очевидно, только один был бы идеальным, но я не знаю, возможно ли это). Проблему пытается найдите двоичные пути, чтобы конвейер мог это сделать, когда он не находит значения по умолчанию. Я не уверен, что причина, по которой я не могу этого сделать, заключается в том, как Heroku устанавливает вещи, или потому, что есть ошибка в django-pipeline, но сейчас это достаточно хорошо для меня.
если вы попробуете это, и это не сработает для вас, дайте мне знать, если я пропустил что-то, я рад сделать обновления.
Я не хочу отнимать у вас отличное решение, но я попробовал это сегодня и нашел несколько отличий, которые сделали вещи проще для меня - вероятно, из-за обновлений в django-pipeline и/или Heroku. Мое решение ниже, в случае, если кто-нибудь придет.
добавить 3 buildpacks в Heroku:
heroku buildpacks:set https://github.com/heroku/heroku-buildpack-ruby.git
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-nodejs
heroku buildpacks:add https://github.com/heroku/heroku-buildpack-python.git
добавить django-pipeline и django-pipeline-compass в требований.txt:
django-pipeline==1.5.2
django-pipeline-compass==0.1.5
создать Gemfile для установить Сасс:
source 'https://rubygems.org'
ruby '2.1.5'
gem 'bootstrap-sass'
создать .в JSON файл для установки Yuglify:
{
"dependencies": {
"yuglify": "0.1.4"
},
"engines": {
"node": "0.10.x",
"npm": "1.4.x"
}
}
мне не нужно Rakefile или конфигурации.rb.
для справки, вот соответствующие настройки из моего settings.py:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, '_generated_media')
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'pipeline.finders.PipelineFinder',
)
PIPELINE_COMPILERS = (
'pipeline_compass.compiler.CompassCompiler',
)
PIPELINE_YUGLIFY_BINARY = os.path.join(BASE_DIR, 'node_modules', '.bin', 'yuglify')
и мне также пришлось добавить эту запись в urls.py:
url(r'^static/(?P<path>.*)$', serve, kwargs={'document_root': settings.STATIC_ROOT})
надеюсь, это поможет кому-то!
вам может понадобиться set PIPELINE_SASS_BINARY
чтобы django-pipeline мог найти ваш компилятор SASS.