我一直试图获得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',)
这在本地工作很好,并在我的/ sass文件夹中生成.css文件,然后将其组合成main.css文件.如果我检查这些CSS文件到我的git仓库并推送到Heroku,它也可以正常工作.但是,如果我忽略它,我想做的是不提交编译文件,那么django-pipeline找不到要合并的文件.我不知道我怎么能得到在Heroku上工作的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'
>创建一个config.rb文件.这是我的正如你可以看到的,需要我包含在我的Gemfile中的bootstrap-sass:
# 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
more details on config.rb can be found here
>安装节点包(django-pipeline want yuglify).你将需要一个package.json文件:
{ "dependencies": { "yuglify": "0.1.4" },"engines": { "node": "0.10.x","npm": "1.3.x" },"repository": { "type": "git","url": "your repo url" } }
几乎准备好了
>当Heroku运行ruby构建包时,它会寻找一个名为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',)
>应该是!部署现在应该正常工作,并没有为我的部署过程增加大量的时间.
总而言之,这相当于很多设置,但对我来说,这是非常值得的,因为我不再需要将编译的文件提交到存储库中,这在使用分支和拉取请求时引起了大量的合并冲突.
我想知道如何使用只有两个构建包(显然只有一个是理想的,但我不知道是否可能).问题是试图找到二进制路径,以便管道可以在没有找到默认值的情况下做到这一点.我不知道我不能这样做的原因是因为Heroku如何安装东西,还是因为在django-pipeline中有一个错误,但现在这对我来说已经够了.
如果你尝试这样做,它不适合你,让我知道,如果我错过了一些我很乐意进行更新的东西.