@@ -235,6 +235,85 @@ You should be seeing your Symfony application in your browser.
235
235
AcmeDemoBundle is only loaded in the dev environment (check out your
236
236
``AppKernel `` class). Try opening ``/app/example `` from the AppBundle.
237
237
238
+ Custom Compile Steps
239
+ ~~~~~~~~~~~~~~~~~~~~
240
+
241
+ If you wish to execute additional custom commands during a build, you can leverage
242
+ Heroku's `custom compile steps `_. Imagine you want to remove the ``dev `` front controller
243
+ from your production environment on Heroku in order to avoid a potential vulnerability.
244
+ Adding a command to remove ``web/app_dev.php `` to Composer's `post-install-commands `_ would
245
+ work, but it also removes the controller in your local development environment on each
246
+ ``composer install `` or ``composer update `` respectively. Instead, you can add a
247
+ `custom Composer command `_ named ``compile `` (this key name is a Heroku convention) to the
248
+ ``scripts `` section of your ``composer.json ``. The listed commands hook into Heroku's deploy
249
+ process:
250
+
251
+ .. code-block :: json
252
+
253
+ {
254
+ "scripts" : {
255
+ "compile" : [
256
+ " rm web/app_dev.php"
257
+ ]
258
+ }
259
+ }
260
+
261
+ This is also very useful to build assets on the production system, e.g. with Assetic:
262
+
263
+ .. code-block :: json
264
+
265
+ {
266
+ "scripts" : {
267
+ "compile" : [
268
+ " app/console assetic:dump"
269
+ ]
270
+ }
271
+ }
272
+
273
+ .. sidebar :: Node.js Dependencies
274
+
275
+ Building assets may depend on node packages, e.g. ``uglifyjs `` or ``uglifycss ``
276
+ for asset minification. Installing node packages during the deploy requires a node
277
+ installation. But currently, Heroku compiles your app using the PHP buildpack, which
278
+ is auto-detected by the presence of a ``composer.json `` file, and does not include a
279
+ node installation. Because the Node.js buildpack has a higher precedence than the PHP
280
+ buildpack (see `Heroku buildpacks `_), adding a ``package.json `` listing your node
281
+ dependencies makes Heroku opt for the Node.js buildpack instead:
282
+
283
+ .. code-block :: json
284
+
285
+ {
286
+ "name" : " myApp" ,
287
+ "engines" : {
288
+ "node" : " 0.12.x"
289
+ },
290
+ "dependencies" : {
291
+ "uglifycss" : " *" ,
292
+ "uglify-js" : " *"
293
+ }
294
+ }
295
+
296
+ With the next deploy, Heroku compiles your app using the Node.js buildpack and
297
+ your npm packages become installed. On the other hand, your ``composer.json `` is
298
+ now ignored. To compile your app with both buildpacks, Node.js *and * PHP, you can
299
+ use a special `multiple buildpack `_. To override buildpack auto-detection, you
300
+ need to explicitly set the buildpack URL:
301
+
302
+ .. code-block :: bash
303
+
304
+ $ heroku buildpack:set https://github.com/ddollar/heroku-buildpack-multi.git
305
+
306
+ Next, add a ``.buildpacks `` file to your project, listing the buildpacks you need:
307
+
308
+ .. code-block :: text
309
+
310
+ https://github.com/heroku/heroku-buildpack-nodejs.git
311
+ https://github.com/heroku/heroku-buildpack-php.git
312
+
313
+ With the next deploy, you can benefit from both buildpacks. This setup also enables
314
+ your Heroku environment to make use of node based automatic build tools like
315
+ `Grunt `_ or `gulp `_.
316
+
238
317
.. _`the original article` : https://devcenter.heroku.com/articles/getting-started-with-symfony2
239
318
.. _`signup with Heroku` : https://signup.heroku.com/signup/dc
240
319
.. _`Heroku Toolbelt` : https://devcenter.heroku.com/articles/getting-started-with-php#local-workstation-setup
@@ -244,3 +323,9 @@ You should be seeing your Symfony application in your browser.
244
323
.. _`verified that the RSA key fingerprint is correct` : https://devcenter.heroku.com/articles/git-repository-ssh-fingerprints
245
324
.. _`post-install-commands` : https://getcomposer.org/doc/articles/scripts.md
246
325
.. _`config vars` : https://devcenter.heroku.com/articles/config-vars
326
+ .. _`custom compile steps` : https://devcenter.heroku.com/articles/php-support#custom-compile-step
327
+ .. _`custom Composer command` : https://getcomposer.org/doc/articles/scripts.md#writing-custom-commands
328
+ .. _`Heroku buildpacks` : https://devcenter.heroku.com/articles/buildpacks
329
+ .. _`multiple buildpack` : https://github.com/ddollar/heroku-buildpack-multi.git
330
+ .. _`Grunt` : http://gruntjs.com
331
+ .. _`gulp` : http://gulpjs.com
0 commit comments