L'objectif est d'automatiser le déploiement d'un site du type middleman vers la production sur heroku après la validation des tests exécutés par travis-ci.
Middleman
Middleman est un générateur de sites statiques utilisant les derniers outils de développement tels que sass, Haml etc. Je l'utilise pour des présentations comme ma présentation du web.
Travis CI
Il s'agit d'un environnement de génération qui permet de tester les applications déposées sur Github.
Travis CI fournit différents runtimes pour différents langages, par exemple plusieurs versions de Ruby, PHP, Node.js. Il est également livré préinstallé avec une variété de banques de données et d'outils communs tels que les courtiers de message.
Vous pouvez facilement tester votre projet pour une ou plusieurs versions de langages et même de banques de données.
L'intégration
Il vous faut utiliser ruby v2.
Vous pouvez ensuite installer travis de la sorte :
gem install travis -v 1.7.5 --no-rdoc --no-ri
En admettant que vous ayez déjà les outils heroku d'installer, vous devez créer un token encrypté (avec des repos publics il vaut mieux !) de votre clé api heroku.
travis encrypt $(heroku auth:token) --add deploy.api_key
Il est maintenant possible de configurer votre fichier .travis.yml
travis setup heroku
Cella vous ajoute dans le fichier une partie deploy
.
deploy:
provider: heroku
api_key:
secure: DkMBDgmZtiI8leX0IyyQ/xiY1MdNXuOd6fnCihqJA8KK2YMluZqbWNnTkWxkhAsEApSLd1oxzsZ8XTMkcsefsNXyRbHHbzXmO7C7iUaxFQpop8A58C1iO9Yy/WyaPSRbvdi2u7el47sYNfxLhOMXax3WvAz0sYKN+AlTYn1YWvk=
app: presentation-web
on:
repo: alain-andre/presentation-web
Mais ceci ne suffit pas pour faire en sorte que le site soit opérationnel sur Heroku. Middleman étant un générateur de site, il va falloir dire à Heroku comment le construire et comment le lancer.
Configuration Heroku
Rakefile
Il faut créer un fichier Rakefile
qui va être utilisé par Heroku pour générer le site. Heroku va automatiquement lancer la tâche assets:precompile
, donc on en profite.
# Rakefile
namespace :assets do
task :precompile do
sh 'middleman build'
end
end
config.ru
Pour faire tourner un site statique Middleman sur Heroku, le site fonctionnera comme une application Rack; il faudra donc un fichier config.ru
.
# config.ru
require 'rack'
require 'rack/contrib/try_static'
# Serve files from the build directory
use Rack::TryStatic,
root: 'build',
urls: %w[/],
try: ['.html', 'index.html', '/index.html']
run lambda{ |env|
four_oh_four_page = File.expand_path("../build/404/index.html", __FILE__)
[ 404, { 'Content-Type' => 'text/html'}, [ File.read(four_oh_four_page) ]]
}
La section Rack::Trystatic
va tenter de livrer les fichiers statiques générés par Middelman à Heroku. Si le processus ne fonctionne pas, il lancera une erreur 404. Pour ceci, il faut avoir ajouté rack-contrib
dans le Gemfile.
Procfile
Pour finir, Heroku va exécuter les commandes du fichier Procfile; il faut donc donner la commande qui monte le serveur.
web: bundle exec middleman server -p $PORT
Sources
jordanelver: how-i-deployed-middleman-to-heroku travis: heroku deployment github: travis installation travis getting started