Default system shell under Stack V6

Engine Yard decided to release Stack V6 based on Ubuntu 18.04.2 LTS as stated in the documentation. In Ubuntu 6.10, the default system shell, /bin/sh, was changed to dash (the Debian Almquist Shell), therefore Stack V6 is using dash as its default system shell.

This affects a couple of aspects as below.

Deploy hooks

Coming from an older Stack Version, deploy hooks might need adjustment. The following is an example to outline this requirement:

run "source #{config.shared_path}/config/env; source #{config.shared_path}/config/; source #{config.shared_path}/config/env.custom; bundle exec rake assets:precompile RAILS_ENV=#{config.framework_env}"

The source command is no longer available, therefore the deploy hook above will fail. The V6 way to write that deploy hook is to replace the source command with the equivalent . as such:

run ". #{config.shared_path}/config/env; . #{config.shared_path}/config/; . #{config.shared_path}/config/env.custom; bundle exec rake assets:precompile RAILS_ENV=#{config.framework_env}"

Custom scripts

Any shell using /bin/sh shebang will default to dash shell and not bash. If you wish to stick to bash, you have to use the proper bash shebang (#!/bin/bash) instead. 

More information

You can have more information about that decision and workarounds a developer should be aware of on the official Ubuntu documentation.


Article is closed for comments.