Ruby開発未経験のJava/PHPエンジニアがRuby On Railsでお問い合わせフォームを作る:skeleton作成編

さてさて、前回のところでRuby On Railsの開発環境が準備出来ました。

ではさっそくRuby On Railsでお問い合わせフォームを作ってみましょう。

このアプリではお問い合わせフォームの投稿内容をバリデート・問い合わせ内容をメール送信&DBに保存してみます。

管理画面を用意して管理者のアカウントでログイン、問い合わせの内容を閲覧できるようにするといったことをやってみたいと思います。

これらの辺の操作で

  • DB操作
  • メール送信
  • ログイン

あたりがひと通り分かるかなと思います。

新規プロジェクトの作成

まずはプロジェクト名をキメます。とりあえずバナナメールという名前にしてみましょう。

Eclipseのプロジェクトの新規作成から「Railsプロジェクト」を選択して「banana-mail」という名前でプロジェクトを作成してみます。

どうやら新規プロジェクトが作成できたようです。

Githubにリポジトリの作成

Githubにリポジトリを作成します。

https://github.com/YoshiteruIwasaki/banana-mail

このへんで常に思うのは、フレームワークに応じたgitignoreを作っておいてcloneして、そこに新規プロジェクトをコマンドベースで作成したい、と思うんですが、大概のフレームワークの新規プロジェクト作成は、作成先フォルダ内にファイルがあると失敗するため、どうやるのがベストな方法なのか、よくわかりません。

Githubに登録

Githubに登録をしておきます。

git init
git add .
git commit -m "first commit"
git remote add origin https://github.com/YoshiteruIwasaki/banana-mail.git
git push -u origin master

データベースの接続先をMySQLにする

風のうわさでは特に指定をしないとSQLiteがデータベースとして設定されるようです。

まあそんなの使うのはほんとサンドボックスだけでしょ。長期的に開発していくにはどうしてもMySQLやPostgreSQLが必要になってきます。

そういうことで、MAMPのMySQLに接続先を変更してみます。

MAMPなのでポート番号もちょっと違っています。

ベースdefaultの設定を読み込む、上書きする項目だけ環境ごとの設定に記載する、ということだと考えました。

/config/database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: banana-mail
  pool: 5
  username: root
  password: root
  port: 8889
  host: localhost

development:
  <<: *default
  database: banana-mail_development

設定を変更したらデータベースのマイグレーションが必要になるみたいです。

マイグレーションコマンドを実行してみたところエラーが。

$ rake db:migrate
rake aborted!
Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).

Gem::LoadError: mysql2 is not part of the bundle. Add it to Gemfile.

Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace)

どうやらトップ階層にあるGemfileを書き換える必要があるようです。

#gem 'sqlite3'
gem 'mysql2'

次はこんなエラー

$ rake db:migrate
Could not find gem 'mysql2 (>= 0) ruby' in any of the gem sources listed in your Gemfile or available on this machine.
Run `bundle install` to install missing gems.

言われた通りのコマンドを実行してみますわ。

bundle install

Installing mysql2 0.3.19 with native extensions

上記のコマンドと同等?

 gem install mysql2 -v '0.3.19'

ただし、0.3.19のインストールはどれだけ待っても完了しなかった。

http://dev.yukashikado.co.jp/post/53813418976/homebrew%E3%81%AAmysql%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E6%99%82%E3%81%AEgem-install-mysql2%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC

http://qiita.com/maangie/items/143b1cdfd8e280012af3

http://shiro-goma.hatenablog.com/entry/2013/09/30/005125

あたりをみると、どうやらHomebrewベースでインストールしたMySQLもMAMPのMySQLもどっちもくせがあるようでして・・。

2015年8月12日追記

結局HomebrewでMySQLをインストールしました。

brew install mysql
gem install mysql2 -v '0.3.19'

Homebrewでインストールしたmysqlは使わない予定なので、自動起動などの設定はしません。

改めてデータベースのマイグレーションをしてみます。

$ rake db:migrate
rake aborted!
Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

どうやらソケットのパスがダメっぽいので、/config/database.yml に以下を追記します。

default: &default
  socket: /Applications/MAMP/tmp/mysql/mysql.sock

データベースを作成する。

データベースがない状態でマイグレーションをしようとすると

$ rake db:migrate
rake aborted!
ActiveRecord::NoDatabaseError: Unknown database 'banana-mail_development'

Mysql2::Error: Unknown database 'banana-mail_development'

Tasks: TOP => db:migrate
(See full trace by running task with --trace)

と出るので、MAMPのphpMyAdminあたりからデータベースを作っておきます。

とりあえず現時点でbundleもgemもなんのことだかよくわかりませんが、Gemfileをもとに依存するモジュールをインストールしてくれるものっぽい気がしています。

参考

http://qiita.com/pchatsu/items/a7f53da2e57ae4aca065

http://qiita.com/itkrt2y/items/4ea5bfe90ca65e4a9ebd

http://stackoverflow.com/questions/5872264/correct-mysql-configuration-for-ruby-on-rails-database-yml-file

https://gist.github.com/erichurst/961978

http://www.rubylife.jp/rails/model/index2.html

http://tesiri.hateblo.jp/entry/2014/05/15/221915

ちなみにプロジェクト作成時に、接続するデータベースをパラメータで設定できるらしいです。

http://www.rubylife.jp/rails/model/index2.html

お問い合わせフォームを作る参考

https://www.imd-net.com/column/1731/

http://ruby-rails.hatenadiary.com/entry/20140828/1409236436

http://d4-1977.hatenablog.com/entry/20120414/1334384900

僕が10年以上前、Apache,PHP,MySQLの環境構築が難しくて挫折しそうになった時から、どうやら時代は一歩も進んでなかったみたいだ。

成果物

https://github.com/YoshiteruIwasaki/banana-mail/commit/7f8e749fad606e3be511e264322789955baf807a