WindowsでRuby, Rails, PostgreSQLをインストールしてherokuにデプロイする方法
Ruby on Rails(RoR)に興味をもったので、「Ruby on Rails チュートリアル」(Rails 3.2版、Rails 4.0版)を読んでみました。で、実際にやってみるといろんな所で泥沼にはまります。これはもろもろの検討結果のメモです。
Ruby
・Ruby 1.9.3 と Ruby 2.0.0(32bit版) をRuby Installerでインストールしてあります。
・Ruby DevKit もRuby Installerからダウンロードしてインストールしてあります。
Git
・以前から入っているので、コマンドプロンプトから使える状態です。後述する Heroku Toolbelt にも入っているので問題無いと思います。
Ruby on Rails
・Railsインストーラーを使う方法はダメでした! Gemでインストールします。
・コマンドプロンプトはRuby 1.9.3 、 Ruby 2.0.0それぞれ専用のものをスタートのメニューからRubyのインストールフォルダにコピーして使っています。プロパティーの作業フォルダーはカレントディレクトリに書き換えておきます。このコマンドプロンプトは起動時に環境変数を設定しているので、Ruby 1.9.3 とRuby 2.0.0を間違いなく使い分けることができます。
・作業手順:
> gem update --system > gem update rake > RubyDevKit\devkitvars ←DevKitの環境変数を設定しています > gem install json --no-ri --no-rdoc > gem install rails --version="~> 3.2.13" --no-ri --no-rdoc 又は > gem install rails --version="~> 4.0.0" --no-ri --no-rdoc
・jsonをインストールしておかないと、あとでコケます!
・Rails 3.2 は heroku にデプロイする前に、後述するアセットのプリコンパイルをしておかないとコケます!
Railsアプリの作成(sqlite3を使う場合)
・まずプロジェクトを作るフォルダーを決めて、そこにRuby専用のコマンドプロンプトをコピーして、作業フォルダーを変更しておきます。コマンドプロンプトはRubyのバージョンが分かるように名前を変えておきます。
・作業手順:
> rails new myapp > cd myapp > bundle install
・次に Gemfile を heroku を使う前提で変更します。
source 'https://rubygems.org' ruby "1.9.3" gem 'rails', '4.0.2' group :development do gem 'sqlite3' end gem 'sass-rails', '~> 4.0.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.0.0' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 1.2' group :doc do gem 'sdoc', require: false end group :production do gem 'pg', '0.15.1' gem 'rails_12factor', '0.0.2' end
・Rubyのバージョンを明記します。
・development と production の区別をします。
・rails_12factor を入れないとデプロイでコケます!
・次に、バンドルアップデートしてから、データベースを使うページを作り、サーバーを起動します。
> bundle update > bundle install --without production > rails g scaffold user name:string email:string > rake db:migrate > rails s
・ブラウザで http://localhost:3000/users を開いて動作を確認します。
・Ctrl + cでサーバーを停止します。
heroku にデプロイする
・heroku のアカウントを取得します。
・Heroku Toolbelt をダウンロードしてインストールします。
・SSH接続のための公開、非公開キーが必要です。既存のものがあればそれを使います。無ければ heroku が自動的に作ってくれます。
・heroku にログインして新しいアプリを初期登録します。
> cd myapp > heroku login > heroku create
・Ruby 2.0 のコマンドプロンプトを使った場合、heroku にログインできないケースがあります! 'DL is deprecated, please use Fiddle' が表示される場合はダメです!
この場合は、Ruby 1.9.3 のコマンドプロンプトを使うしかありません! この作業は Ruby 1.9.3 で実行しても問題ありません。
・公開キーに日本語が含まれると heroku ではコケます! コンピュータ名が日本語だと自動作成のものには日本語が含まれてしまいます! (日本語の部分を英語に書き換えても問題ないようです・・・キーなのに?)
・キーを手動で作り、heroku に登録する方法:
> ssh-keygen -t rsa -C "root@yourmail.com" > heroku keys:add
・次に、Git を初期化して、コミットしておきます。
・heroku にアプリをデプロイして DB のマイグレーションを行います。
> git push heroku master > heroku run rake db:migrate
・heroku は自動的にトップの index ページを削除しますので、最初にアクセスすると焦ります!
・http://*********.herokuapp.com/users/ にアクセスして下さい。
・Rails 3.2 の場合は heroku にプッシュする前にプリコンパイルする必要があります。プリコンパイル後にGitのコミットも必要です。
> rake assets:precompile
deveropにPostgreSQLを使う場合
・Download PostgreSQL からダウンロードしてインストールします。c:\ の直下にインストールするのが推奨です。
・64bit版でも問題ありません。また、スタックビルダから追加ソフトをインストールする必要はありません。
・環境変数の Path に 'C:\PostgreSQL\9.3\bin' を追加します。
・新しいアプリを作ります:
> rails new myapp1 -d postgresql > cd myapp1 > bundle install
・PostgreSQL を使う場合は -d postgresql がポイントです!
・myapp1にて、新規のデータベースとそのユーザーを作ります:
> createuser -U postgres -P new_username > createdb -U postgres -O new_username -E utf8 mydb1
・Gemfile を heroku 用に書き換えます。
source 'https://rubygems.org' ruby "2.0.0" gem 'rails', '4.0.2' gem 'pg', '0.17.1' gem 'sass-rails', '~> 4.0.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.0.0' gem 'jquery-rails' gem 'turbolinks' gem 'jbuilder', '~> 1.2' group :doc do gem 'sdoc', require: false end group :production do gem 'rails_12factor', '0.0.2' end
・myapp1\config\database.yml を書き換えます。
development: adapter: postgresql encoding: utf8 database: mydb1 pool: 5 username: new_username password: your_password host: localhost port: 5432 test: adapter: postgresql encoding: utf8 database: mydb1 pool: 5 username: new_username password: your_password host: localhost port: 5432 production: adapter: postgresql encoding: utf8 database: mydb1 pool: 5 username: new_username password: your_password host: localhost port: 5432
・次に、バンドルアップデートしてから、データベースを使うページを作り、サーバーを起動します。
> bundle update > bundle install --without production > rails g scaffold user name:string email:string > rake db:migrate > rails s
・ブラウザで http://localhost:3000/users を開いて動作を確認します。
・Ctrl + cでサーバーを停止します。
・heroku にデプロイする手順は上記と同じです。
補足事項
以上で heroku にデプロイするまでの手順は終わりですが、補足事項をメモしておきます。
・heroku でURLを変更した場合、URLが書いてあるファイルを書き換える必要があります。 → .git/config
> git config -e
・RoR チュートリアルに書いてあるルーティングの方法は古いみたいです。また、ページを追加するたびにコントローラとルートに追記が必要なの? と疑問に思っていたら違いました。
root 'static_pages#home' get 'about' => 'static_pages#about' get 'samples/:action' => 'my_pages' resources :users
・3行目の書き方をしておけば、コントローラにアクションを追記するだけで済みます。
・コントローラーごとにスタイルシートを使い分けたい場合は app/assets/stylesheets にそれぞれのシートを準備します。ビューのリンク部分は次のように記述します。javascript についても同様です。
<%= stylesheet_link_tag params[:controller], media: "all", "data-turbolinks-track" => true %> <%= javascript_include_tag params[:controller], "data-turbolinks-track" => true %>
・application.css の '*= require_tree . ' の '=' は消した方がよいでしょう。
・しかし、このままでは heroku にデプロイしても個別のスタイルシートをプリコンパイルしてくれません! 従って、CSSが全く反映されないページが表示されます!
・対策として、config/apprication.rb に以下のように追記します。
config.assets.precompile += %w( users.css static_pages.css my_pages.css)