dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

WindowsでRuby, Rails, PostgreSQLをインストールしてherokuにデプロイする方法

 Ruby on RailsRoR)に興味をもったので、「Ruby on Rails チュートリアル」(Rails 3.2版Rails 4.0版)を読んでみました。で、実際にやってみるといろんな所で泥沼にはまります。これはもろもろの検討結果のメモです。

 

Ruby

・環境は Windows7 x64 です。

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)