58

私はgruntとgrunt-contrib-copygrunt-contrib-mincss(アプリケーションのnpm依存関係としてリストされている)のようなgruntプラグインも使用しています。

また、生成されたすべてのファイルがあるnpm_modulesフォルダーとフォルダーをコミットしません。publicまた、サーバーをデプロイしてセットアップした後(コマンドがあります)、アプリをビルドする方法がわかりませんgrunt build(既にフォルダーを探していpublicます)。

のようなものを見ましたgrunt-heroku-deployが、アップロードする前にコミットするのは悪い考えのようです。たぶんいくつかの穏やかな決定があります...何か考えはありますか?

4

7 に答える 7

85

npmは、postinstall(他の多くの中で)ステップをサポートしています。これはまさにあなたが探しているものかもしれません。

node.js heroku buildpackは、ビルドの依存関係を解決するためにherokuにプッシュすると、次のコマンドを実行します。

$ npm install --production

https://devcenter.heroku.com/articles/nodejs-support#build-behavior

npm installnpmのドキュメントを見ると、パッケージの実行前または実行後に実行する一連のスクリプトを設定できます。scriptsのプロパティで構成されますpackage.json。このプロパティを使用すると、パッケージのライフサイクルで特定のことが発生したときにscriptsカスタムスクリプト(を含む)を実行できます。grunt

たとえば、テキストをエコーし​​て、grunt誰か(Herokuを含む)が実行するたびにコマンドを実行するには、これを:npm installに追加します。package.json

{
  ...
  "scripts": {
    "postinstall": "echo postinstall time; ./node_modules/grunt-cli/bin/grunt <your task name>"
  },
  ...
}

https://npmjs.org/doc/scripts.html

重要な注意事項:

  • スクリプト内のgruntバイナリへのパスを変更する必要がある場合があります。コマンドが実行されないpostinstall場合は、エラー出力を確認してください。grunt
  • gruntHerokuによってインストールされるように、にgrunt-cliとしてリストされている必要がありますdependency。Herokuはそれらをインストールしないため、package.jsonそれらを下にリストするだけでは不十分です。devDependenciesまた、Herokuはグローバルパッケージとしてインストールしないため、Herokuで実行するには、相対パスを使用する必要があることに注意してください(上記で構成されているため)。

これが機能しない場合(おそらく相対パスを少しいじる必要があるでしょう)、Heroku用に独自のカスタムビルドパックを作成することを検討することをお勧めします。

アップデート

0.4以降、gruntパッケージにはバイナリが含まれなくなり、gruntバイナリはパッケージの一部になりましたgrunt-cli。これを反映するように回答が更新されました。

于 2012-12-10T06:32:38.987 に答える
24

これは、HerokuPlatormAPIslugrelease機能がメインラインに組み込まれたときに大部分が解決されるようです。その時点で、コードをローカル(またはciサーバー上)でビルドし、パッケージ化してAPI呼び出しを介してherokuに送信し、そこからリリースすることができます。

これはまだベータ期間であり、2013年12月19日にのみ発表されました。

https://devcenter.heroku.com/articles/platform-api-deploying-slugs

生成されたコードをgitまたはNPMpostinstallフックにチェックインしても大丈夫だと思われる人の数に私は決して満足していませんでした。:(

さらに、哲学的な観点から、リリース中にビルドを実行することは、単に別の潜在的な障害点です。


楽しみのために:これはまだ完成していないので、これが私が一緒に投げたbashスクリプトで、デプロイメントブランチでコードをビルドし、コミットし、herokuにデプロイしてから、デプロイメントブランチを削除するために使用できます。(私は実際にはbashデプロイメントスクリプトのファンではないので、プラットフォームAPIの追加を本当に楽しみにしています)

#!/bin/bash
set -e 

# Delete current deploy branch
git branch -D deploy
# Create new deploy branch based on master
git checkout -b deploy
# Grunt comands to build our site
grunt build:production
# the dist/ directory is in my .gitignore, so forcibly add it
git add -f dist/
git commit -m "Deploying to Heroku"
# Push it up to heroku, the -f ensures that heroku won't complain
git push heroku -f deploy:master
# Switch it back to master
git checkout master
于 2014-01-10T23:54:34.223 に答える
23

Grunt(et al。)はビルドツールであり、(実際には)パッケージ化して本番環境で実行する必要があるものではありません。別のアプローチは、ビルドされたファイルをHerokuにプッシュする前に、Gruntを使用してプロジェクトをローカルで(またはCIサーバーでより適切に)準備することです。すでに述べたように、Herokuはnpm installプッシュされた後にアプリを実行します。これは、最終的にアプリを準備するのに十分なはずです。

Gruntから派生/構築されたHerokuアプリが、メインのアプリソースコードリポジトリとは完全に別のGitリポジトリに存在するように設定しました。そのため、私が行うgrunt deployと、関連するファイルが最適化されてHerokuリポジトリにコピーされ、整理されて(git add -Aなど)、次にgit push heroku master(または何でも)整理されます。

ライブサーバーがビルド済みのアプリパッケージの実行のみを担当している場合は、関心の分離が明確になっているようです。

YMMVはもちろん、上記の受け入れられた答えも完全に有効です...特にHerokuのようなよく理解された安定したライブ環境で。

于 2013-02-24T10:33:42.000 に答える
6

Herokuビルドパックは私にとっては問題なく動作します。素晴らしいもの。

于 2012-12-09T12:29:16.807 に答える
2

これをgrunt4.0で機能させるには、https: //discussion.heroku.com/t/grunt-on-heroku/98/2の手順に従いました。私がしなければならなかった唯一の変更は、UNIXスタイルのスラッシュを使用するとウィンドウで失敗するため、うなり声へのパスを削除することでした。幸い、NPMはnode_modules / .binフォルダーhttps://npmjs.org/doc/scripts.html#pathでうなり声を探すため、パスを指定する必要はありません。

  1. gruntがcliをグローバルにインストールするように指示した場合でも、gruntとgrunt-cliの両方がpackage.jsonにローカルにインストールされていることを確認してください。$:npm i -S grunt grunt-cli

  2. 次のようなpostinstallステップをpackage.jsonに追加します。"postinstall": "grunt prod"

于 2013-09-27T03:46:47.853 に答える
0

そこからgruntを呼び出すことができるので、npmpostinstallステップがおそらく最良のオプションです。ただし、 heroku-buildpack-nodejs-gruntなどのカスタムビルドパックも確認する必要があります。

于 2013-11-02T17:21:12.933 に答える
0

この投稿はRails固有ですが、バックエンドフレームワークで使用できず、Rubyビルドパックを使用しているものと交換することができなかった理由がわかりません。

解決策は、基本的にマルチビルドパックを使用し、HerokuでNode/Gruntビルドパックを実行grunt buildすることです。

重要なことに、このソリューションでは、ビルドアーティファクトをバージョン管理にチェックインする必要はありません。(わーい!!!)

http://www.angularonrails.com/deploy-angular-rails-single-page-application-heroku/

于 2014-08-01T12:43:54.757 に答える