Heroku有料化に伴いOpenShiftを試した。その時のメモ。
以下、簡単と言いながら色々躓いているがドキュメントは凄く親切なので、基本的にはこれで足りる。
アカウントを作る
Webページから(省略)。
コマンドラインツールのインストール
コマンドラインツールrhcがgemで提供されているので、まずはRuby1系の最新をインストール。 2系だとエラー。
gem install rhc
依存関係で怒られた。
ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dependencies: rhc requires highline (~> 1.6.11); commander requires highline (~> 1.7.1)
~> 1.6.11
という指定は1.6.Xまでしか受け付けないようだ。
gem install highline -v 1.6.11
再度。
gem install rhc
また怒られた。
ERROR: While executing gem ... (Gem::DependencyError) Unable to resolve dependencies: commander requires highline (~> 1.7.1)
gem install rhc failed. Gem::DependencyError · Issue #678 · openshift/rhc · GitHub gemをアップデートしろと。
gem install rubygems-update update_rubygems gem install rhc
また怒られた。今度はgemのエラーっぽい。
ERROR: While executing gem ... (ArgumentError) invalid byte sequence in UTF-8
Windows固有の問題らしいので以下を参考に修正。 会社の PC で 2 時間ほど悶々と悩んでたこと。 - msfukuiの日記
win32/registry.rb
#FormatMessageA = Kernel32.extern "int FormatMessageA(int, void *, int, int, void *, int, void *)", :stdcall FormatMessageW = Kernel32.extern "int FormatMessageW(int, void *, int, int, void *, int, void *)", :stdcall def initialize(code) @code = code #msg = "\0".force_encoding(Encoding::ASCII_8BIT) * 1024 msg = "\0\0".force_encoding(Encoding::UTF_16LE) * 1024 #len = FormatMessageA.call(0x1200, 0, code, 0, msg, 1024, 0) len = FormatMessageW.call(0x1200, 0, code, 0, msg, msg.size, 0) #msg = msg[0, len].force_encoding(Encoding.find(Encoding.locale_charmap)) msg = msg[0, len].encode(Encoding.find(Encoding.locale_charmap)) #super msg.tr("\r", '').chomp super msg.tr("\r".encode(msg.encoding), '').chomp end
再度。
gem install rhc
出来た。
コマンドラインツールのセットアップ
rhc setup
色々訊かれるので、問題なければデフォルト値とyesをひたすら選択。 途中、さっき作ったアカウントでログイン。 SSH鍵の作成から公開鍵を登録するところまでやってくれる(秘密鍵は手動で読み取り専用にしろと書いてある)。
Node.jsアプリケーションの作成
多分Node.js以外も同じようなプロセスになるとは思う。
URLはhttp://アプリ名-ドメイン名.rhcloud.com/
になるので慎重につける。(後からでも変更できるけど面倒)
アプリケーション作成Webからでも出来るが、ここではコマンドで作成。 Node.jsの場合はカートリッジ名をnodejs-0.10とする。
rhc create-app home nodejs-0.10
最初のアプリケーションを作る場合はここで名前空間(ドメイン)を訊かれるので入力。
怒られた。
The authenticity of host 'home-jinjor.rhcloud.com (54.166.221.17)' can't be established. RSA key fingerprint is Are you sure you want to continue connecting (yes/no)?
ここに至る前に仮に作ったドメインが気に入らなくて消したりしたせいかも。 もう一度セットアップ。
rhc setup
Web画面からアプリを消して再度作成する。
rhc create-app home nodejs-0.10
今度は通った。IPアドレスやら何やらが付与される。
この時点で、http://home-jinjor.rhcloud.com/
に既にデフォルトアプリが立ち上がっているので見に行く。
開発を進める
先ほど作ったアプリのルートに移動して、Gitのリモートリポジトリを一応確認しておく。
git remote -v
何故か.gitignoreが無かったので追加。
echo node_modules > .gitignore
後はいつものようにNode.jsアプリを起動。
npm install node server
http://localhost:8080/
にアクセスして確認。
ソースも確認。
self.ipaddress = process.env.OPENSHIFT_NODEJS_IP; self.port = process.env.OPENSHIFT_NODEJS_PORT || 8080;
Herokuと同じく、主要な情報を環境変数から取得しているのが分かる。 Herokuと同じなら、DB等のアドオンの情報も環境変数から取得できるはず。
修正したらプッシュ。
git push origin master
自動的に再デプロイされる。
感想
Herokuと同じ。