web-dev-qa-db-fra.com

Déploiement Ruby on Rails - Existe-t-il une bonne alternative pour Heroku?)

Je démarre une nouvelle petite entreprise, un POC si vous le souhaitez, et je veux déployer mon application Rails gratuitement quelque part. J'ai trouvé qu'il y a Heroku, y a-t-il d'autres options?

32
obenda

Oui il y en a

Ceci est un très bon article que j'ai trouvé sur le sujet

http://blog.sudobits.com/2013/02/15/heroku-alternatives-for-deploying-Rails-applications

J'ai passé en revue les options une par une et, à mon humble avis, OpenShift est la meilleure option pour un site Web de petite taille, au moins pour le début du développement et de la création d'un POC\Prototype

Pourquoi est-ce mieux?

  • Il vous donne ce que Heroku vous donnera
  • Cela vous donne un stockage local (persistant) - Vous n'avez donc pas besoin de payer pour S3 sur Amazon ou équivalent - Je suppose qu'à un moment donné, vous aimeriez le faire (pour utiliser S3), mais au moins pour le début pas besoin de mettre de l'argent dessus
  • Il semble que le site Web fonctionne plus rapidement
  • Je le trouve plus flexible pour contrôler ce qui se passe sur la machine

Y a-t-il des inconvénients?

  • Le seul inconvénient que j'ai pu trouver sur Openshift est qu'il semble que le déploiement prend beaucoup plus de temps que sur Heroku et qu'il y a un retard considérable sur la première fois que vous vous adressez au site Web (mais après la première fois, cela fonctionne plus rapidement - pas lié à la mise en cache du navigateur si vous pensez que c'est le problème)

Il se peut que la section Gemfile sous ce document https://www.openshift.com/blogs/converting-an-existing-Rails-app-to-run-on-openshift puisse résoudre ce problème ...Je vais essayer plus tard

Quelles sont les étapes à suivre pour déployer mon application déjà existante sur Openshift?

Dans de nombreux endroits, j'ai trouvé des explications sur la façon de créer et de déployer une nouvelle application , mais il était un peu difficile de comprendre comment mettre mon application déjà existante sur OpenShift

C’est la raison pour laquelle je veux expliquer que

Hypothèses - Votre application est déjà git contrôlée - Son chemin est/home/dev/MyApp - vous êtes maintenant sous/home/dev

  1. Créez un compte Openshift sur https://www.openshift.com
  2. Utilisez les outils de ligne de commande, je les ai trouvés beaucoup plus informatifs
  3. Allez sur https://www.openshift.com/get-started
  4. Suivez les étapes 1 à 3 pour installer et configurer les outils de ligne de commande
  5. cd dans votre dossier Rails application/home/dev/MyApp
  6. Créez un nouveau domaine d'application - Exécutez: rhc domain-create <domain name>
  7. Créez votre application dans OpenShift en exécutant

    rhc app-create -a MyApp -t Ruby-1.9 --no-git

    -a définit le nom de l'application sous OpenShift - Cela peut être quelque chose de totalement différent de votre Rails nom de l'application

    -t définit le type d'application - je pense que pour l'instant Ruby 1.9 est leur version la plus élevée prise en charge

    --no-git dit de ne pas créer git - Parce que nous en avons déjà un

  8. Configurez votre base de données

    • Installez la cartouche DB appropriée pour votre application OpenShift en appelant

      rhc cartridge add <DB cartridge type> -a <Application Name>

      Par exemple :

      rhc cartridge add mysql-5.1 -a MyApp

      Il prend également en charge MongoDB et PostgreSQL

      (voir ici https://www.openshift.com/developers/technologies )

    • Modifiez votre database.yml pour qu'il soit lié à la base de données OpenShift - Maintenant, c'est très facile car OpenShift a obtenu une grande partie de sa configuration en tant que variables d'environnement et vous pouvez simplement l'utiliser où vous en avez besoin - Par exemple:

    production:
      adapter: mysql
      encoding: utf8
      database: <%=ENV['OPENSHIFT_APP_NAME']%>
      pool: 5
      Host: <%=ENV['OPENSHIFT_MYSQL_DB_Host']%>
      port: <%=ENV['OPENSHIFT_MYSQL_DB_PORT']%>
      username: <%=ENV['OPENSHIFT_MYSQL_DB_USERNAME']%>
      password: <%=ENV['OPENSHIFT_MYSQL_DB_PASSWORD']%>
      socket: <%=ENV['OPENSHIFT_MYSQL_DB_SOCKET']%>
    
  9. Assurez-vous que tout fonctionne localement

    • Exécutez: 'bundle install'
    • Run: 'Rails s' - Voir que tout va bien
  10. Git - Ajoutez le référentiel OpenShift comme l'un de vos référentiels distants et poussez-le

    • Assurez-vous que tout votre travail est mis à jour, engagé et synchronisé avec votre GitHub - Cela peut vous faire économiser beaucoup de maux de tête plus tard
    • Courir : rhc app-show <application name> - Cela vous montrera toutes les informations sur votre application - Copiez l'URL Git
    • Courir : git remote add openshift <OpenShift repo URL>
    • Prenez tout ce que OpenShift ajoute en fusionnant

      Courir : git merge openshift/master -s recursive -X ours

    • Validez les modifications: git commit -am 'adding OpenShift files

    • Poussez vers OpenShift: git Push openshift

C'est tout, maintenant votre application doit être déployée sur OpenShift

Comment puis-je ouvrir mon site Web déployé?

En utilisant le rhc app-show <application name> commande, vous pouvez voir l'url de votre site Web

Ce sera généralement http://<application name>-<domain name>.rhcloud.com

Il est assez facile de le changer pour votre propre domaine

  • Exécutez simplement rhc alias add <app name> <your domain>
  • Ensuite, dans votre gestion DNS - Modifiez la définition CNAME 'www' pour pointer vers http://<application name>-<domain name>.rhcloud.com

Comment puis-je me connecter à ma machine OpenShift?

Encore une fois, en utilisant rhc app-show <application name> vous pouvez voir l'adresse SSH Exécutez simplement ssh <SSH address> pour se connecter

Comment exécuter automatiquement la migration et l'amorçage lors du déploiement?

Une bonne chose dans OpenShift est la possibilité d'ajouter des actions personnalisées (action-hooks) qui sont déclenchées à différentes étapes du déploiement

Vous pouvez en savoir plus à ce sujet ici https://www.openshift.com/developers/deploying-and-building-applications

Pour l'instant, je ne parlerai que du crochet d'action de déploiement

  1. Sous votre dossier d'application, accédez à .openshift/action_hooks et créez un fichier nommé deploy sous celui-ci
  2. Rendez ce fichier exécutable - Exécutez: chmod +x deploy
  3. Mettez du code dedans

    Par exemple:

    #!/bin/bash

    echo "Démarrage du déploiement"

    pushd $ {OPENSHIFT_REPO_DIR}>/dev/null

    echo "Changer le répertoire en $ {OPENSHIFT_REPO_DIR} public"

    cd $ {OPENSHIFT_REPO_DIR}

    cd public

    echo "Création d'un lien logiciel vers $ {OPENSHIFT_DATA_DIR} uploads nommés uploads"

    ln -s $ {OPENSHIFT_DATA_DIR} uploads uploads

    echo "Exécution du bundle exec rake db: migrate Rails_ENV = production"

    bundle exec rake db: migrer Rails_ENV = "production"

    echo "Exécution du bundle exec rake db: seed Rails_ENV = production"

    bundle exec rake db: seed Rails_ENV = "production"

    popd>/dev/null

    • Le lien logiciel sera expliqué plus tard - il est nécessaire pour le routage de trouver les fichiers téléchargés Carrierwave
  4. Ajoutez le fichier à votre git - git add deploy (à l'intérieur du dossier bien sûr)
  5. Validez vos modifications et appuyez sur pour ouvrir la télécommande openshift

Comment puis-je intégrer Carrierwave pour pouvoir télécharger des fichiers et enregistrer sur OpenShift?

Il y a deux points

  1. Où les fichiers seront-ils enregistrés? - C'est facile
  2. Le routage saura-t-il comment récupérer mes fichiers téléchargés?

Définition du chemin d'enregistrement:

Définissez le fichier initializers\carrierwave.rb sur

CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :file
    config.enable_processing = true
    config.root = ENV['OPENSHIFT_DATA_DIR']
    config.cache_dir = config.root + 'uploads'
  end    
end

laissez les téléchargeurs tels qu'ils sont par défaut, ce qui signifie storage :file

et

def store_dir

"uploads/# {model.class.to_s.underscore}/# {monté_as}/# {model.id}"

fin

L'utilisation du dossier $ OPENSHIFT_DATA_DIR nous assurera que nous pourrons écrire les fichiers et qu'il y restera

S'assurer que le routage trouvera les fichiers:

Il m'a fallu un certain temps pour trouver cette astuce (pas trop, juste quelques heures)

Le routage Rails sait comment relier uniquement les dossiers qui se trouvent sous le dossier d'application - alors, sur la machine OpenShift, il recherchera le dossier des fichiers téléchargés (nommé uploads dans notre cas) sous le $ {OPENSHIFT_REPO_DIR}\dossier public, c'est là que le lien logiciel que j'ai mis dans le fichier deploy devient pratique - Il triche simplement le système et le fait aller chercher ces fichier à partir d'un dossier qui ne se trouve pas dans le dossier d'application


Je sais qu'il y a beaucoup de messages sur ces problèmes et comment déployer et tout, mais je voulais juste mettre de l'ordre dedans.

Bien sûr, il pourrait y avoir des erreurs et des inexactitudes dans ce que j'ai écrit car je n'ai pas documenté chaque étape du processus, mais juste d'après ce dont je me souviens, n'hésitez pas à me corriger si je me trompe dans certains détails.

L'une des meilleures sources est la documentation OpenShift

J'espère que ces choses aideront les gens et vous feront gagner du temps et de l'argent

Prendre plaisir

66
obenda