※数日後にアクセスしたら
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
ではじかれて入れません。なんてこったあああ!
(その後)Macからだと問題なくpushできました。謎です。
RubyをWindowsにインストールしたときに入る「Start Command Prompt with Ruby」を使うとpushはできました。が、rakeは相変わらずMacからでないとダメのようです。
(その後)Macからだと問題なくpushできました。謎です。 こんにちは。最近あいさつで始まるエントリーをよく見かけるようになったので私も挨拶してみます。挨拶って大切ですよね。
私は、以前はさくらインターネットのホスティング・サーバーを使っていたのですが、Sinatraが使いたくてHerokuに乗り換えました。しばらくHerokuを使っていて、じゅうぶん便利だと感じたので、さくらインターネットの方は解約しました。
その後、職場でMacマシンからWindowsマシンへ移住するよう言われ、一時的にHerokuが使えない状況でした。しかしサーバー環境がないと検証できない案件が発生したため、WindowsでHerokuのセットアップにトライしてみました。会社のプロキシ内という条件もあり、厳しいかなと思ったのですが、意外とすんなりうまくいきました。
本稿ではHerokuに「Hello World!」と出力するだけのSinatraアプリケーションをデプロイします。Railsの場合も手順はほぼ同様だと思われます。
-
Ruby1.9.3をインストール(http://rubyinstaller.org/)
Ruby1.9.3-p125が現時点のHeroku推奨バージョンなのですが、どうにもダウンロードできなかったので、Ruby1.9.3-p327をインストールしました。
-
GitHub for Windowsをインストール(http://windows.github.com/)
個人的にあまりコマンドラインが好きではないので、わかりやすいGUIを備えているGitHub for Windowsをインストールします。といってもCommitにしか使わないのですが。
インストールしたらログインしてリモートレポジトリを見ておきます(要GitHubアカウントでした・・・)。こうすることで手元の環境に公開鍵が作成されます。
-
Heroku Toolbeltをダウンロード(https://toolbelt.heroku.com/)
heroku gem、foreman gem、Gitの3つがインストールされます。こちらでもGitがインストールされますが、GUIがわかりにくいので使いません。
gemだけインストールするなら
$gem install heroku
でも良いような気がしますが、念のためToolbeltをインストールします。
-
以下の作業はレポジトリを置きたいディレクトリで行なってください。
-
コマンド
$heroku login
私はすでにアカウントを持っているのでログインできます。持っていないかたは新規登録してください。
-
おっと、プロキシのせいでheroku loginコマンドが失敗
下記コマンドで環境変数をセットしてあげると成功します。
$set http_proxy=http://proxy-server.com:port
この方法はbundleコマンドでも同様のようなので、ひょっとしたら他のケースでも使えるかもしれません。
-
コマンド
$heroku apps:create <app-name>
app-nameという名前のherokuアプリケーションを作成します。アプリケーションの名前に含めることのできる記号は「-」(ダッシュ)だけです。
$heroku create
というコマンドでも作ることができるのですが、変な名前が自動的に付くので、やめておきます。
-
コマンド
$git clone [email protected]:<app-name>.git
は、
Permission denied (publickey).
で失敗します。手元の環境の公開鍵がHerokuに登録されていないためです。公開鍵自体はGitHub for Windowsで作ってあるので、それをHerokuに登録します。
-
コマンド
$heroku keys:add
このコマンドだけで手元の環境の公開鍵が自動的に登録されます。Herokuの鍵まわりは嵌りやすいポイントなのでホッとしました。
以下の様なメッセージが表示されます。
Found existing public key: C:/path/.ssh/github_rsa.pub Uploading SSH public key C:/path/.ssh/github_rsa.pub... done
-
コマンド
$git clone [email protected]:<app-name>.git
緊張の一瞬ですが成功しました。ふー。
warning: You appear to have cloned an empty repository.
というメッセージが返ります。作ったばかりなので当然ですね。
-
cloneしてきたフォルダにapp.rb, config.ru, Gemfile作成します
適当なエディタでファイルを作っていきます。ちなみに私はSublime Text 2というエディタを使っています。Windowsでも使えるのが嬉しいですね。
-
app.rb:
以下のように編集します。
require "rubygems" require "sinatra" get "/" do "Hello world!" end
「Hello world!」とだけ出力するシンプルなSinatraアプリケーションです。
-
config.ru:
以下のように編集します。
require "./app" run Sinatra::Application
このファイルはRack用なんですかね。
-
Gemfile:
以下のように編集します。
source "https://rubygems.org" gem "sinatra"
HerokuはBundler必須なのでGemfileを用意します。
-
コマンド
おっと、gemをインストールしなければ・・・
$gem install sinatra bundler
-
コマンド
Bundler gemをつかってアプリケーション依存gemをレポジトリにインストールします。
$bundle
-
コマンド
まずは手元の環境でアプリケーションがちゃんと動いているか確認しましょう。
$ruby app.rb
「http://localhost:4567」をWebブラウザで開きます。「Hello World!」と表示されているのを確認します。
-
GitHub for WindowsでCommit
・・・いや、
git commit -m 'comment message'
でも全然いいのですが。ここは個人的な趣向です。
-
.git/configをエディタで開いてoriginをherokuに変更します
これはよくわからないのですがHerokuからCloneしてくると「origin」ターゲットとして設定されるので「heroku」ターゲットに書き換えます。こうすることで、このレポジトリをGitHubにPushできるようにもなります。詳しいやり方は下記記事を参考にしてください。
GitHubとHerokuに両対応させるには — Gist https://gist.github.com/3595855
-
コマンド
$git push heroku master
でデプロイします
ドキドキの瞬間です。
-
ブラウザで動作を確認
念のためWebブラウザで確認します。表示されていますか?長い道のりでしたね。お疲れさまでした。
これで楽しいHerokuライフが待っています。
静的なコンテンツだけを置くのもSinatraがあればpublicフォルダに入れるだけなので簡単ですね。
memcache、New Relic、Mongo Labといった様々なアドオンも魅力的です。
それにアクセスが集中したらいつでもスケールアップさせることができます。私は、残念ながらそういう嬉しい悲鳴を上げるような状況には遭遇していないのですが、いつかはやってみたいものです。