私は新しい小さなベンチャーを始めています。必要に応じて POC です。Rails アプリケーションをどこかに無料でデプロイしたいと考えています。Heroku があることがわかりました。他に選択肢はありますか?
1 に答える
はい、あります
これは、この件に関して見つけた非常に良い投稿です
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 の下にいます
- https://www.openshift.comで Openshift アカウントを作成します
- コマンド ライン ツールを使用すると、はるかに有益であることがわかりました
- https://www.openshift.com/get-startedに移動します
- コマンド ライン ツールをインストールしてセットアップするには、手順 1..3 に従います。
- Rails アプリケーション フォルダー /home/dev/MyApp に cd します。
- 新しいアプリケーション ドメインを作成します - 実行します。
rhc domain-create <domain name>
を実行して、OpenShift でアプリケーションを作成します。
rhc app-create -a MyApp -t ruby-1.9 --no-git
-a OpenShift でアプリケーション名を設定します - これは、Rails アプリケーション名とはまったく異なるものにすることができます
-t アプリケーションの種類を設定します - 今のところ ruby 1.9 がサポートされている最高のバージョンだと思います
--no-git は git を作成しないように指示します - 既に git を取得しているため
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']%>
すべてがローカルで機能していることを確認してください
- 実行: 「バンドル インストール」
- Run : 'rails s' - すべて問題ないことを確認します
Git - リモート リポジトリの 1 つとして OpenShift リポジトリを追加し、プッシュします。
- すべての作業が更新され、コミットされ、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 管理で - CNAME 'www' 定義を編集して、
http://<application name>-<domain name>.rhcloud.com
OpenShift マシンに接続するにはどうすればよいですか?
繰り返しrhc app-show <application name>
ますが、使用すると SSH アドレスが表示されますssh <SSH address>
。接続するには実行するだけです
展開時に移行とシードを自動的に実行するにはどうすればよいですか?
OpenShift の優れた点の 1 つは、デプロイのさまざまな段階でトリガーされるカスタム アクション (アクション フック) を追加できることです。
詳細については、https://www.openshift.com/developers/deploying-and-building-applicationsをご覧ください。
ここでは、デプロイ アクション フックについてのみ説明します。
- アプリケーションフォルダーの下で .openshift/action_hooks に移動し、その
deploy
下にという名前のファイルを作成します - このファイルを実行可能にする - 実行:
chmod +x deploy
それにいくつかのコードを入れます
例えば:
#!/ビン/バッシュ
echo "デプロイを開始しています"
pushd ${OPENSHIFT_REPO_DIR} > /dev/null
echo "ディレクトリを ${OPENSHIFT_REPO_DIR}public に変更"
CD ${OPENSHIFT_REPO_DIR}
CD公開
echo "名前付きアップロード ${OPENSHIFT_DATA_DIR} アップロードへのソフト リンクを作成しています"
ln -s ${OPENSHIFT_DATA_DIR}uploads アップロード
echo "bundle exec rake db:migrate RAILS_ENV=production を実行しています"
bundle exec rake db:migrate RAILS_ENV="production"
echo "bundle exec rake db:seed RAILS_ENV=production を実行しています"
bundle exec rake db:seed RAILS_ENV="production"
popd > /dev/null
- ソフト リンクについては後で説明します。Carrierwave がアップロードしたファイルをルーティングで見つけるために必要です。
- ファイルをgitに追加します-
git add deploy
(もちろんフォルダー内から) - 変更をコミットして openshift リモートにプッシュする
ファイルをアップロードして OpenShift に保存できるように Carrierwave を統合するにはどうすればよいですか?
ポイントは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}/#{mounted_as}/#{model.id}"
終わり
$OPENSHIFT_DATA_DIR フォルダーを使用すると、ファイルを書き込めるようになり、そこにとどまります。
ルーティングがファイルを見つけることを確認します。
そのトリックを思いつくのにしばらく時間がかかりました(多すぎず、ほんの数時間です)
Rails ルーティングは、アプリケーション フォルダーの下にあるフォルダーのみを関連付ける方法を知っています。つまり、OpenShift マシンではuploads
、${OPENSHIFT_REPO_DIR}\public フォルダーの下にアップロードされたファイル フォルダー (この場合は名前が付けられています)が検索されます。展開ファイルに挿入したソフトリンクが便利になりました-システムをだまし、アプリケーションフォルダーの下にないフォルダーからそれらのファイルを取得するようにします
これらの問題や展開方法などに関する投稿がたくさんあることは知っていますが、いくつか整理したかっただけです。
もちろん、すべてのステップを文書化したわけではないので、私が書いたものには間違いや不正確さがあるかもしれませんが、覚えていることから、詳細に間違っている場合は自由に修正してください.
最良のソースの 1 つは、OpenShift のドキュメントです。
これらのことが人々を助け、時間とお金を節約してくれることを願っています
楽しみ