32 votes

Déployer 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?

66voto

obenda Points 571

Oui il y a des

C'est un très bon post que j'ai trouvé sur le sujet

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

Je suis allé sur les options une par une et, à mon humble avis, OpenShift est la meilleure option pour une petite-moyenne site, au moins pour le début de l'élaboration et de la création d'un POC\Prototype

Pourquoi est-il mieux?

  • Il vous donne ce Heroku vous donnera
  • Il vous donne locales (persistant) de stockage de Sorte que vous n'avez pas besoin de payer pour les S3 sur Amazon ou équivalent - je suppose que, dans un certain moment vous souhaitez le faire (utiliser S3), mais au moins pour le début, vous n'avez pas besoin de mettre de l'argent sur elle
  • Il semble que le site web est en cours d'exécution plus rapide
  • Je la trouve plus souple en termes de contrôle de ce qui se passe sur la machine

Quels sont les 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, puis sur Heroku et il y a beaucoup de retard sur la première fois que vous l'adresse du site web (Mais après la première heure de travail est plus rapide - Pas liées à la mise en cache du navigateur si vous pensez que c'est la question)

Il se pourrait que le Gemfile section en vertu de ce document https://www.openshift.com/blogs/converting-an-existing-rails-app-to-run-on-openshift peut résoudre ce problème...je vais essayer plus tard

Quelles sont les démarches que je dois faire afin de 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 de nouvelles applications, mais c'était un peu dur à comprendre comment mettre mon application déjà existante sur OpenShift

C'est la raison pour laquelle je tiens à expliquer que

Hypothèses - Votre demande est git contrôlé déjà - Son chemin d'accès est /home/dev/MyApp - vous êtes maintenant dans /home/dev

  1. Créer compte sur Openshift https://www.openshift.com
  2. Utiliser les outils de ligne de commande, je l'ai trouvé beaucoup plus instructif
  3. Aller à https://www.openshift.com/get-started
  4. Suivez les étapes 1..3 pour installer et configurer les outils de ligne de commande
  5. cd de votre application rails dossier /home/dev/MyApp
  6. Créer un nouveau domaine d'application - Run : rhc domain-create <domain name>
  7. Créez votre application dans OpenShift en cours d'exécution

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

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

    -t indique le type de demande, je pense que pour l'instant ruby 1.9 est leur plus haute version prise en charge

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

  8. Configuration de votre base de données

    • Installer la DB cartouche pour votre OpenShift application 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)

    • Modifier votre base de données.yml de se relier à La base de données - Maintenant, c'est très facile depuis OpenShift a beaucoup de configuration comme des variables d'environnement et vous pouvez simplement l'utiliser partout 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 en local

    • Exécuter : 'bundle install'
    • Exécuter : 'rails de s' - Voir que tout est OK
  10. Git - Ajouter le OpenShift référentiel comme l'un de vos dépôts distants et de pousser à l'

    • Assurez-vous que tout votre travail est mis à jour , engagés et synchronisé avec votre GitHub - Ce qui peut sauver beaucoup de mots de têtes plus tard
    • Exécution : rhc app-show <application name> - Cela va vous montrer toutes les informations au sujet de votre demande de Copie l'URL Git
    • Exécution : git remote add openshift <OpenShift repo URL>
    • Prendre toutes les OpenShift est l'ajout par la fusion

      Exécution : git merge openshift/master -s recursive -X ours

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

    • Le pousser pour OpenShift : git push openshift

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

Comment puis-je ouvrir mon déployés de site web?

À l'aide de l' rhc app-show <application name> commande vous pouvez voir l'url de votre site web

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

Il est assez facile de le modifier pour votre propre nom de domaine

  • Il suffit d'exécuter rhc alias add <app name> <your domain>
  • Puis dans votre gestion DNS - Modifier le CNAME " www " définition du point de http://<application name>-<domain name>.rhcloud.com

Comment puis-je me connecter à mon OpenShift machine?

Encore une fois , à l'aide de rhc app-show <application name> , vous pouvez voir l'adresse SSH Exécutez simplement ssh <SSH address> afin de vous connecter

Comment puis-je exécuter l'migrer et de graines automatiquement lors du déploiement?

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

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

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

  1. En vertu de votre dossier d'application aller .openshift/action_hooks et créer un fichier nommé deploy sous
  2. Rendre ce fichier exécutable Terme : chmod +x deploy
  3. Mettre du code dans il

    Par exemple:

    #!/bin/bash

    echo "Démarrage de déployer"

    pushd ${OPENSHIFT_REPO_DIR} > /dev/null

    echo "choisissez le répertoire ${OPENSHIFT_REPO_DIR}public"

    cd ${OPENSHIFT_REPO_DIR}

    cd publique

    echo "Création des liens symboliques à ${OPENSHIFT_DATA_DIR}uploads nommé à jour"

    ln -s ${OPENSHIFT_DATA_DIR}téléchargements téléchargements

    echo "bundle exec rake db:migrate RAILS_ENV=production"

    bundle exec rake db:migrate RAILS_ENV="production"

    echo "bundle exec rake db:graine RAILS_ENV=production"

    bundle exec rake db:graine RAILS_ENV="production"

    popd > /dev/null

    • Le doux lien qui vous sera expliqué plus tard - il est nécessaire pour l'acheminement de trouver le Carrierwave fichiers téléchargés
  4. Ajouter le fichier à votre git - git add deploy (à partir de l'intérieur du dossier de cours)
  5. Valider vos modifications et appuyez pour openshift à distance

Comment puis-je intégrer Carrierwave afin que je puisse télécharger des fichiers et de les enregistrer sur OpenShift?

Il y a deux points

  1. Où les fichiers seront sauvegardés ? - C'est facile
  2. Sera le routage savoir comment faire pour récupérer mes fichiers téléchargés ?

Réglage de l'enregistrement de la trajectoire:

Définir les initialiseurs\carrierwave.rb fichier

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

laisser les téléchargeurs comme ils le sont par défaut, signification, storage :file

et

def store_dir

"uploads/#{modèle.classe.to_s.trait de soulignement}/#{mounted_as}/#{modèle.id}"

fin

L'utilisation de l' $OPENSHIFT_DATA_DIR dossier assurez-vous que nous allons être en mesure d'écrire les fichiers et qu'il va y rester

S'assurer le routage trouverez les fichiers:

Il m'a fallu un certain temps à venir avec ce truc (pas trop non plus, juste une couple d'heures)

Rails de routage sait concernent uniquement les dossiers qui se trouvent sous le dossier de l'application - soo, sur La machine, il va chercher les fichiers téléchargés dossier (nommé uploads dans notre cas) en vertu de l' ${OPENSHIFT_REPO_DIR}\dossier public , c'est là que le doux lien que j'ai mis dans la de déployer le fichier est en train de devenir à la main - Il simplement cheats le système et de le rendre pour aller chercher ces fichiers à partir d'un dossier qui n'est pas dans le dossier de l'application


Je sais qu'il y a beaucoup de messages au sujet de ces problèmes et la façon de déployer et tout et tout, mais je voulais juste mettre un peu d'ordre dans il.

Bien sûr, il peut y avoir des erreurs et des inexactitudes dans ce que j'ai écrit car je n'ai pas documenté chaque étape de la voie, mais seulement de ce que je me souviens, n'hésitez pas à me corriger si je me trompe sur certains détails.

Un de la meilleure source est le OpenShift documentation

J'espère que ces choses vont aider les gens et vous faire économiser du temps et de l'argent

Profitez de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X