Ruby on Rails
Déploiement d'une application Rails sur Heroku
Recherche…
Déploiement de votre application
Assurez-vous d'être dans le répertoire contenant votre application Rails, puis créez une application sur Heroku.
$ heroku create example
Creating ⬢ example... done
https://example.herokuapp.com/ | https://git.heroku.com/example.git
La première URL de la sortie, http://example.herokuapp.com , correspond à l'emplacement où l'application est disponible. La deuxième URL, [email protected]: example.git, est l'URL du référentiel git distant.
Cette commande ne doit être utilisée que sur un dépôt git initialisé. La commande heroku create ajoute automatiquement une télécommande git nommée «heroku» pointant vers cette URL.
L'argument du nom de l'application («exemple») est facultatif. Si aucun nom d'application n'est spécifié, un nom aléatoire sera généré. Étant donné que les noms d'applications Heroku se trouvent dans un espace de noms global, vous pouvez vous attendre à ce que des noms communs, tels que «blog» ou «wiki», soient déjà utilisés. Il est souvent plus facile de commencer avec un nom par défaut et de renommer l'application ultérieurement.
Ensuite, déployez votre code:
$ git push heroku master
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Ruby app detected
remote: -----> Compiling Ruby/Rails
remote: -----> Using Ruby version: ruby-2.3.1
remote: -----> Installing dependencies using bundler 1.11.2
remote: Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment
remote: Warning: the running version of Bundler is older than the version that created the lockfile. We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: Fetching gem metadata from https://rubygems.org/..........
remote: Fetching version metadata from https://rubygems.org/...
remote: Fetching dependency metadata from https://rubygems.org/..
remote: Installing concurrent-ruby 1.0.2
remote: Installing i18n 0.7.0
remote: Installing rake 11.2.2
remote: Installing minitest 5.9.0
remote: Installing thread_safe 0.3.5
remote: Installing builder 3.2.2
remote: Installing mini_portile2 2.1.0
remote: Installing erubis 2.7.0
remote: Installing pkg-config 1.1.7
remote: Installing rack 2.0.1
remote: Installing nio4r 1.2.1 with native extensions
remote: Installing websocket-extensions 0.1.2
remote: Installing mime-types-data 3.2016.0521
remote: Installing arel 7.0.0
remote: Installing coffee-script-source 1.10.0
remote: Installing execjs 2.7.0
remote: Installing method_source 0.8.2
remote: Installing thor 0.19.1
remote: Installing multi_json 1.12.1
remote: Installing puma 3.4.0 with native extensions
remote: Installing pg 0.18.4 with native extensions
remote: Using bundler 1.11.2
remote: Installing sass 3.4.22
remote: Installing tilt 2.0.5
remote: Installing turbolinks-source 5.0.0
remote: Installing tzinfo 1.2.2
remote: Installing nokogiri 1.6.8 with native extensions
remote: Installing rack-test 0.6.3
remote: Installing sprockets 3.6.3
remote: Installing websocket-driver 0.6.4 with native extensions
remote: Installing mime-types 3.1
remote: Installing coffee-script 2.4.1
remote: Installing uglifier 3.0.0
remote: Installing turbolinks 5.0.0
remote: Installing activesupport 5.0.0
remote: Installing mail 2.6.4
remote: Installing globalid 0.3.6
remote: Installing activemodel 5.0.0
remote: Installing jbuilder 2.5.0
remote: Installing activejob 5.0.0
remote: Installing activerecord 5.0.0
remote: Installing loofah 2.0.3
remote: Installing rails-dom-testing 2.0.1
remote: Installing rails-html-sanitizer 1.0.3
remote: Installing actionview 5.0.0
remote: Installing actionpack 5.0.0
remote: Installing actionmailer 5.0.0
remote: Installing railties 5.0.0
remote: Installing actioncable 5.0.0
remote: Installing sprockets-rails 3.1.1
remote: Installing coffee-rails 4.2.1
remote: Installing jquery-rails 4.1.1
remote: Installing rails 5.0.0
remote: Installing sass-rails 5.0.5
remote: Bundle complete! 15 Gemfile dependencies, 54 gems now installed.
remote: Gems in the groups development and test were not installed.
remote: Bundled gems are installed into ./vendor/bundle.
remote: Bundle completed (31.86s)
remote: Cleaning up the bundler cache.
remote: Warning: the running version of Bundler is older than the version that created the lockfile. We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.
remote: -----> Preparing app for Rails asset pipeline
remote: Running: rake assets:precompile
remote: I, [2016-07-08T17:08:57.046245 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-1bf5315c71171ad5f9cbef00193d56b7e45263ddc64caf676ce988cfbb6570bd.js
remote: I, [2016-07-08T17:08:57.046951 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-1bf5315c71171ad5f9cbef00193d56b7e45263ddc64caf676ce988cfbb6570bd.js.gz
remote: I, [2016-07-08T17:08:57.060208 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css
remote: I, [2016-07-08T17:08:57.060656 #1222] INFO -- : Writing /tmp/build_49ba6c877f5502cd4029406e981f90b4/public/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css.gz
remote: Asset precompilation completed (4.06s)
remote: Cleaning assets
remote: Running: rake assets:clean
remote:
remote: ###### WARNING:
remote: No Procfile detected, using the default web server.
remote: We recommend explicitly declaring how to boot your server process via a Procfile.
remote: https://devcenter.heroku.com/articles/ruby-default-web-server
remote:
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote: Default types for buildpack -> console, rake, web, worker
remote:
remote: -----> Compressing...
remote: Done: 29.2M
remote: -----> Launching...
remote: Released v5
remote: https://example.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/example.git
* [new branch] master -> master
Si vous utilisez la base de données dans votre application, vous devez migrer manuellement la base de données en exécutant:
$ heroku run rake db:migrate
Toutes les commandes après l' heroku run
seront exécutées sur un dyno Heroku. Vous pouvez obtenir une session shell interactive en exécutant:
$ heroku run bash
Assurez-vous d'avoir un dyno exécutant le type de processus Web:
$ heroku ps:scale web=1
La commande heroku ps répertorie les dynos en cours d'exécution de votre application:
$ heroku ps
=== web (Standard-1X): bin/rails server -p $PORT -e $RAILS_ENV (1)
web.1: starting 2016/07/08 12:09:06 -0500 (~ 2s ago)
Vous pouvez maintenant visiter l'application dans notre navigateur avec heroku open
.
$ heroku open
Heroku vous donne une URL Web par défaut dans le domaine herokuapp.com
. Lorsque vous êtes prêt à évoluer pour la production, vous pouvez ajouter votre propre domaine personnalisé.
Gestion des environnements de production et de mise en scène pour un Heroku
Chaque application Heroku s'exécute dans au moins deux environnements: sur Heroku (nous appellerons cette production) et sur votre machine locale (développement). Si plusieurs personnes travaillent sur l'application, vous disposez de plusieurs environnements de développement, généralement un par ordinateur. Habituellement, chaque développeur aura également un environnement de test pour exécuter des tests. Malheureusement, cette approche échoue à mesure que les environnements deviennent moins similaires. Windows et Mac, par exemple, offrent des environnements différents de ceux de la pile Linux sur Heroku. Vous ne pouvez donc pas toujours être sûr que le code qui fonctionne dans votre environnement de développement local fonctionnera de la même façon lorsque vous le déploierez en production.
La solution consiste à disposer d'un environnement de stockage aussi proche que possible de la production. Cela peut être réalisé en créant une seconde application Heroku qui héberge votre application de transfert. Avec le staging, vous pouvez vérifier votre code dans un paramètre similaire à celui de la production avant qu'il affecte vos utilisateurs réels.
À partir de zéro
Supposons qu'une application s'exécute sur votre machine locale et que vous êtes prêt à la transmettre à Heroku. Nous aurons besoin de créer à la fois des environnements distants, une mise en scène et une production. Pour prendre l'habitude de pousser d'abord à la mise en scène, nous allons commencer par ceci:
$ heroku create --remote staging
Creating strong-river-216.... done
http://strong-river-216.heroku.com/ | https://git.heroku.com/strong-river-216.git
Git remote staging added
Par défaut, la CLI de heroku crée des projets avec une télécommande heroku git. Ici, nous spécifions un nom différent avec l'indicateur --remote, donc pousser le code vers Heroku et exécuter des commandes sur l'application est un peu différent du maître git push heroku:
$ git push staging master
...
$ heroku ps --remote staging
=== web: `bundle exec puma -C config/puma.rb``
web.1: up for 21s
Une fois que votre application de transfert est opérationnelle, vous pouvez créer votre application de production:
$ heroku create --remote production
Creating fierce-ice-327.... done
http://fierce-ice-327.heroku.com/ | https://git.heroku.com/fierce-ice-327.git
Git remote production added
$ git push production master
...
$ heroku ps --remote production
=== web: `bundle exec puma -C config/puma.rb
web.1: up for 16s
Et avec cela, vous disposez du même code source que deux applications Heroku distinctes: une mise en scène et une production, configurées de manière identique. Rappelez-vous juste que vous devrez spécifier quelle application vous allez utiliser dans votre travail quotidien. Vous pouvez soit utiliser l'option "--remote", soit utiliser votre configuration git pour spécifier une application par défaut.