web-dev-qa-db-ja.com

Ruby on Rails-をデプロイする-Herokuに代わるものはありますか?

新しい小さなベンチャー、必要に応じてPOCを開始しています。Railsアプリケーションを無料でどこかにデプロイします。Herokuがあることがわかりました。別のオプションはありますか?

32
obenda

はい、あります

これは私がこのテーマで見つけたとても良い投稿です

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

私はそこでオプションを1つずつ検討しましたが、私の考えでは、OpenShiftは、少なくともPOC\Prototypeの開発と作成の最初の段階では、中小規模のWebサイトに最適なオプションです。

なぜそれが良いのですか?

  • Herokuが提供するものを提供します
  • それはあなたにローカル(永続的な)ストレージを提供します-したがって、Amazonまたは同等のものでS3の料金を支払う必要はありません-ある時点で(S3を使用するために)それをやりたいと思いますが、少なくとも最初はあなたはしませんお金をかける必要はありません
  • ウェブサイトがより高速に動作しているようです
  • マシンで何が起こっているかを制御するという点で、より柔軟だと思います

デメリットはありますか?

  • Openshiftで私が見つけた唯一の欠点は、Herokuに比べてデプロイに時間がかかり、最初にWebサイトにアクセスするときにかなりの遅延があるようです(ただし、初回の動作が速くなった後-ブラウザーのキャッシュとは関係ありません)これが問題だと思う場合)

このドキュメントの下のGemfileセクション https://www.openshift.com/blogs/converting-an-existing-Rails-app-to-run-on-openshift でこの問題を解決できる可能性があります...後で試します

既存のアプリケーションをOpenshiftにデプロイするために必要な手順は何ですか?

多くの場所で、作成とデプロイの方法についての説明を見つけました新しいアプリケーションですが、既存のアプリケーションをOpenShiftに配置する方法を理解するのは少し困難でした

これが私が説明したい理由です

前提条件-アプリケーションはすでにgitで制御されています-そのパスは/ home/dev/MyAppです-現在/ home/devの下にいます

  1. https://www.openshift.com でOpenshiftアカウントを作成します
  2. コマンドラインツールを使用します。
  3. https://www.openshift.com/get-started に移動します
  4. 手順1..3に従って、コマンドラインツールをインストールおよびセットアップします。
  5. cd to your Rails application folder/home/dev/MyApp
  6. 新しいアプリケーションドメインを作成する-実行:rhc domain-create <domain name>
  7. 実行してOpenShiftでアプリケーションを作成します

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

    -aはOpenShiftでアプリケーション名を設定します-あなたのRailsアプリケーション名とは完全に異なるものにすることができます

    -tはアプリケーションタイプを設定します-今のところRuby 1.9がサポートされている最も高いバージョンです)

    --no-gitはgitを作成しないように指示します-すでに取得しているため

  8. DBを設定する

    • 呼び出して、OpenShiftアプリケーションに適切なDBカートリッジをインストールします

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

      例えば ​​:

      rhc cartridge add mysql-5.1 -a MyApp

      MongoDBとPostgreSQLもサポートします

      (こちらをご覧ください https://www.openshift.com/developers/technologies

    • OpenShiftデータベースに関連するようにdatabase.ymlを変更します。OpenShiftが環境変数として多くの設定を取得し、必要な場所で簡単に使用できるため、これは非常に簡単です。次に例を示します。

    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. すべてがローカルで機能していることを確認してください

    • 実行:「バンドルインストール」
    • 実行:「Rails s」-すべてが正常であることを確認します
  10. Git-OpenShiftリポジトリをリモートリポジトリの1つとして追加し、それをプッシュする

    • すべての作業が更新され、コミットされ、GitHubと同期されていることを確認してください-これにより、後で多くの頭痛の種を節約できます
    • 実行:rhc app-show <application name>-アプリケーションに関するすべての情報が表示されます-Git URLをコピーします
    • 実行:git remote add openshift <OpenShift repo URL>
    • マージすることでOpenShiftが追加するものは何でも

      実行:git merge openshift/master -s recursive -X ours

    • 変更をコミットします:git commit -am 'adding OpenShift files

    • OpenShiftにプッシュ:git Push openshift

以上で、アプリケーションをOpenShiftにデプロイできるようになりました

展開したWebサイトを開くにはどうすればよいですか?

rhc app-show <application name>コマンドを使用すると、WebサイトのURLを確認できます

通常はhttp://<application name>-<domain name>.rhcloud.comです

自分のドメインに変更するのはとても簡単です

  • rhc alias add <app name> <your domain>を実行するだけです
  • 次にDNS管理で-http://<application name>-<domain name>.rhcloud.comを指すようにCNAMEの「www」定義を編集します

OpenShiftマシンに接続するにはどうすればよいですか?

繰り返しますが、rhc app-show <application name>を使用すると、SSHアドレスを確認できます。接続するには、ssh <SSH address>を実行するだけです

デプロイ時に移行とシードを自動的に実行するにはどうすればよいですか?

OpenShiftのすばらしい点の1つは、デプロイメントのさまざまな段階でトリガーされるカスタムアクション(アクションフック)を追加できることです。

詳しくはこちら https://www.openshift.com/developers/deploying-and-building-applications

ここでは、デプロイアクションフックについてのみ説明します

  1. アプリケーションフォルダーの下で.openshift/action_hooksに移動し、その下にdeployという名前のファイルを作成します
  2. このファイルを実行可能にします-実行:chmod +x deploy
  3. それにいくつかのコードを入れます

    例えば:

    #!/ bin/bash

    エコー "展開の開始"

    pushd $ {OPENSHIFT_REPO_DIR}>/dev/null

    echo "ディレクトリを$ {OPENSHIFT_REPO_DIR} publicに変更します"

    cd $ {OPENSHIFT_REPO_DIR}

    cDパブリック

    echo "$ {OPENSHIFT_DATA_DIR} uploadsという名前のアップロードへのソフトリンクを作成しています"

    ln -s $ {OPENSHIFT_DATA_DIR} uploads uploads

    echo "バンドルexec rake db:migrate Rails_ENV = productionを実行しています"

    バンドルexec rake db:migrate Rails_ENV = "production"

    echo "バンドルexec rake db:seed Rails_ENV = productionを実行しています"

    バンドルexec rake db:seed Rails_ENV = "production"

    popd>/dev/null

    • ソフトリンクについては後で説明します-ルーティングがCarrierwaveアップロードファイルを見つけるために必要です
  4. ファイルをgitに追加します-git add deploy(もちろんフォルダー内から)
  5. 変更をコミットし、OpenShift Remoteにプッシュします

ファイルをアップロードしてOpenShiftで保存できるようにCarrierwaveを統合するにはどうすればよいですか?

2点あります

  1. ファイルはどこに保存されますか? - これは簡単
  2. ルーティングは、アップロードされたファイルを取得する方法を知っていますか?

保存パスの設定:

Initializers\carrierwave.rbファイルを次のように設定します

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

アップローダーをデフォルトのままにしておく、つまりstorage :file

そして

def store_dir

「uploads /#{model.class.to_s.underscore} /#{linked_as} /#{model.id}」

終わり

$ OPENSHIFT_DATA_DIRフォルダーを使用すると、ファイルを書き込むことができ、そこにとどまることが確認されます

ルーティングがファイルを見つけることを確認する:

そのトリックを思い付くのにしばらく時間がかかりました(多すぎない、ほんの数時間)

Railsルーティングは、アプリケーションフォルダーの下にあるフォルダーのみを関連付ける方法を知っています-soo、OpenShiftマシンでは、$ {OPENSHIFT_REPO_DIR} \の下でアップロードされたファイルフォルダー(この場合はuploads)を探しますパブリックフォルダー、ここでdeployファイルに挿入したソフトリンクが便利になります-システムをだまして、アプリケーションフォルダーの下にないフォルダーからそれらのファイルを取得するだけです


これらの問題やデプロイの方法などに関する投稿がたくさんあることは知っていますが、それに何らかの順序を付けたかっただけです。

もちろん、すべての手順を文書化したわけではないので、私が書いた内容には間違いや不正確な点があるかもしれませんが、覚えていることからだけでも、細部に誤りがある場合は遠慮なく訂正してください。

最高のソースの1つはOpenShiftのドキュメントです

私はそれらが人々を助け、あなたの時間とお金を節約することを願っています

楽しい

66
obenda