STEP10:Ruby on Railsのプロジェクトを作成しよう!#Rails


今回は、ローカル開発環境(Mac)で、Railsプロジェクトを新規作成したいと思います。

今まで、私は、Railsプロジェクトを新規作成する場合に、単純に「rails new」してきました。
ただ、今回は、Bundlerを使って新規作成をするとグローバルな環境ではなく、ローカル環境下で依存関係を綺麗に管理できると知ったので、その方法でRailsプロジェクトを作成してみたいと思います。

1.Bundlerのインストール

$ rbenv exec gem install bundler
$ rbenv rehash
$ rbenv exec bundle --version

2.プロジェクトの新規作成

今回のプロジェクト名は、「pgnyumon」として作成します。

$ mkdir pgnyumon
$ cd pgnyumon
$ bundle init

Gemfileが生成されるので、記載されているgem “rails”のコメントを外します。

 # A sample Gemfile
 source "https://rubygems.org"

 gem "rails"

bundler経由で、Railsをインストールします。

$ bundle install --path vendor/bundle

結構時間がかかって、こんなエラーが出ました。

Bundler::GemspecError: Could not read gem at /Users/kanako/tickle_dev/pgnyumon/vendor/bundle/ruby/2.2.0/cache/nokogiri-1.6.6.2.gem. It may be corrupted.
An error occurred while installing nokogiri (1.6.6.2), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.6.2'` succeeds before bundling.

ひとまず、メッセージに表示されているように、下記を実行。

gem install nokogiri -v '1.6.6.2'

nokogiriのインストールが出来たので、再度、トライしてみます。

$ bundle install --path vendor/bundle

でも、やっぱり怒られます。

Bundler::GemspecError: Could not read gem at /Users/kanako/tickle_dev/pgnyumon/vendor/bundle/ruby/2.2.0/cache/nokogiri-1.6.6.2.gem. It may be corrupted.
An error occurred while installing nokogiri (1.6.6.2), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.6.2'` succeeds before bundling

色々と調べて試したけど、すべてうまく行かずに途方にくれていた所、エラーメッセージをよく見てみると「cache/nokogiri-1.6.6.2.gem」となっているので、cacheだったら一度削除してみたらうまくいくかも?と削除してみます。

rm -rf ./vendor/bundle/ruby/2.2.0/cache/nokogiri-1.6.6.2.gem

そして、再度、実行してみます。

$ bundle install --path vendor/bundle

うまく、インストールができました!!

次は、Rails新規プロジェクトを生成します。
今回のプロジェクトは、Rails標準のテスティングフレームワーク「test-unit」を利用するのではなく「Rspec」を利用したいので、オプションに「test-unit」は利用しないように指定します。
データベースは、「mysql」を利用したいので、それも指定しました。

$ bundle exec rails new . --skip-test-unit -d mysql

Railsプロジェクトが生成できたら、Gemfileのmysqlの記述を変更します。
プロジェクト生成直後は、バージョンの指定がありませんが、このように指定します。
というのも、バージョンを指定しないと、後のrails serverを起動時にエラーになります。

gem 'mysql2', '~> 0.3.20'

そして、bundle install

bundle install

3.mysqlにデータベースを作成

次に、データベースを作成します。
Railsのデータベースに関する設定は、「config/database.yml」にあります。
中身を見てみましょう。

$ cat config/database.yml 
# MySQL.  Versions 5.0+ are recommended.
#
# Install the MYSQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
#
default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password:
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: pgnyumon_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: pgnyumon_test

# As with config/secrets.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default
  database: pgnyumon_production
  username: pgnyumon
  password: <%= ENV['PGNYUMON_DATABASE_PASSWORD'] %>

Railsでは、簡単に開発用・テスト用・本番用のデータベースを使い分けることができます。
プロジェクト名である「pgnyumon」の開発用データベースは「pgnyumon_development」。
テスト用のデータベースは「pgnyumon_test」で、本番用は「pgnyumon_production」です。

 

rakeコマンドを利用して次のように実行します。

$ rake db:create

mysqlにログインして、データベースが作成できているか確認します。

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 28
Server version: 5.6.26 Homebrew

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+----------------------+
| Database             |
+----------------------+
| information_schema   |
| mysql                |
| pgnyumon_development |
| pgnyumon_test        |
| test                 |
+----------------------+
8 rows in set (0.01 sec)

開発用とテスト用のデータベースが作成されています。

次に、Webサーバーを立ち上げます。

bundle exec rails s

「http://localhost:3000」にアクセスしてみましょう。
Railsプロジェクトを作成しよう!

 

Railsプロジェクトのトップページが表示されました!

4.本番用MySQLアカウントのパスワードを設定

config/database.ymlの、productionに、パスワードを設定します。
パスワードは任意で良いのですが、今回は、pwgenというMacで利用できるパスワード生成ツールを利用したいと思います。

pwgenをインストールします。

$ brew  install pwgen

下記が、pwgenの利用方法です。

$ pwgen [ OPTION ] [ pw_length ] [ num_pw ]

pw_lengthはパスワードの文字数で、num_pwは生成する個数になります。
オプションは、色々とありますが、今回はこんな感じで実行してみました。
「-B」は、lと1, 0とOなどの紛らわしい文字を含めません。
「-c」は、少なくとも1個の大文字を含めます。
「-n」は、少なくとも1個の数字を含めないという指定になります。

$ pwgen -B -c -n 15 1

生成されたパスワードを、config/database.ymlのproductionに設定して、Gitにコミットします。
今回は、これまで!

次回は、今後開発するにあたって、便利なgemをインストールしたいと思います。

 

前回の記事は、「Amazon Linuxに、Ruby + Railsのインストールをしよう!」
次の記事は、「Rails開発で便利なGemを選ぼう!」

Ruby on Railsおすすめ書籍

Ruby on Railsの勉強で参考になった書籍です!

Ruby on Railsで質問したい!

Teratail(テラテイル)

WEBエンジニア専用のQ&Aサイトで、RubyやRailsも質問することができます。活発に質問と回答がされていますので、会員登録をして利用してみると良いと思います(^o^)。

エンジニアのためのQ&Aサイト【teratail】

Ruby on Railsが学べるオンラインスクール

好きな場所で好きな時間に受講できるオンラインスクール!最近は、Ruby on Railsも学ぶことができます!

TechAcademy(テックアカデミー)

オンラインでの週2回マンツーマンでのメンタリング、毎日15〜23時のチャット・レビューサポートで短期間で未経験からオリジナルサービスを開発できるようになる学習プログラム。オリジナルサービスをHerokuを使って公開するところまでを行います。

オンラインブートキャンプ Webアプリケーションコース