さてさて、前回のところで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