所以,我得到了它的工作,但我仍然開放更好的解決方案。
我將調用項目「Main」和「Frontend」(Main的Git子模塊)。大多數設置都是在Main中,我仍想避免這種設置,以便將來進行類似的安裝,但我現在不知道如何實現。
我加入3- buildpacks主:heroku/ruby
(對於羅盤的支持;否則不需要),heroku/nodejs
(對於咕嚕支持),並且heroku/python
(因爲主要是燒瓶項目):
heroku buildpacks:clear &&
heroku buildpacks:add heroku/ruby &&
heroku buildpacks:add heroku/nodejs &&
heroku buildpacks:add heroku/python
然後,我加入Gemfile
主:如果你不使用bootstrap-sass
不需要
source "https://rubygems.org"
gem 'sass', "3.4.23"
gem 'compass', "1.0.3"
gem 'bootstrap-sass', "3.3.7"
最後一行。
您還需要Gemfile.lock
,你可以查看/創建/與bundle check
,bundle install
和bundle update
刷新。
我們並不真正需要的主要咕嚕處理,但我們仍然需要在主一Gruntfile.js
調用子模塊的處理(以下創建this example):
module.exports = function(grunt) {
grunt.registerTask('buildapp', function(dir) {
var done = this.async();
var done_or_error = function(err, result, code) {
if (err == null) {
grunt.log.writeln(result);
grunt.log.writeln('processed ' + dir);
done();
}
else {
grunt.log.writeln('processing ' + dir + ' failed: ' + code);
grunt.log.writeln(' ERR: ' + err);
grunt.log.writeln(' RESULT: ' + result);
done(false);
}
};
grunt.log.writeln('processing ' + dir);
grunt.util.spawn(
{
cmd: 'npm',
args: ['install'],
opts: {
cwd: dir,
},
},
done_or_error
);
});
grunt.registerTask('build', function() {
grunt.task.run(['buildapp:server/shared']);
});
grunt.registerTask('heroku', ['build']);
};
如果你的主要是已經使用Grunt,您可以將上述內容添加爲其中的任務之一。
要自動獲得此運行,在主要創建package.json
:
{
"name": "...",
"version": "...",
"dependencies": {
"compass": "^0.1.1",
"grunt": "^0.4.5",
"grunt-cli": "^1.2.0",
"grunt-util-spawn": "0.0.2"
},
"engines": {
"node": "8.4.0"
},
"scripts": {
"postinstall": "grunt heroku"
}
}
這裏的關鍵部分是grunt heroku
。其餘的只是我的依賴,對你來說可能不同。
以上將在前端觸發npm install
。爲了有一個運行前端的咕嚕聲,以及在前端的package.json
添加
"postinstall": "grunt ..."
到"scripts"
。這是你通常手動建立你的前端(在我的情況下,完整的命令是grunt deploy --target production
)。
不要忘記將生成的文件添加到.gitignore
。對於我的主,它只是/node_modules
,而我的前端,它是:
/node_modules
gen
/dist
/static/css
理想情況下,你必須設定的項目只有一個目錄中GRUN生成的文件,(我有幾個,由於傳統原因)。