Sinatra+MySQL+ActiveRecordでDatabaseの設定を行う
以下のサイトを参考に、SinatraでのDatabaseの設定を行います。
Sinatra+ActiveRecord+MySQLで、簡単APIサーバ構築 - Qiita
作業的には非常に簡単なのですが忘れるのでw
準備
RubyとMySQLをインストール出来ていない場合はインストールします。
ここが最初は結構大変なのですが、割愛します、すみません...笑
Macの場合はRubyの管理にrbenvを、パッケージの管理にbrewを使うのがおすすめです。以下を参考にしてみてください。
Ruby,MySQLの環境を構築する(Mac版) - Qiita
MySQL初期設定
次は、データを格納するためのデータベースとテーブルを作成しておきます。
僕はサーバーなど違う環境でも同じことが出来るよう以下のようにbootstrap.sql
みたいな名前をつけて初期化のためのSQL文を羅列したファイルを作成しておきました。
--bootstrap.sql CREATE DATABASE IF NOT EXISTS database; USE database create table users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, email VARCHAR(255) NOT NULL, order_num INT UNSIGNED NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL, PRIMARY KEY(id) );
そしたら以下のような感じにsqlのスクリプトを渡しちゃえばデータベースとテーブルを一気に作ってくれるはずです。
$ mysql -u root -p -h localhost < bootstrap.sql
Bundler設定
gem管理のためにbundlerを導入します。まずinitしてGemfileを生成。
$ bundle init
# Gemfile source "https://rubygems.org" gem "activerecord" gem "mysql2" gem "sinatra"
mysql2を使えばまぁよさそうです。若干古いのですが下の記事を参照。
RubyでMySQLに繋ぐためのruby-mysqlとmysql2 - たごもりすメモ
そしてgemをインストール。
$ bundle install
これでgem関連はokですね。
database.ymlを作成
次にdatabaseの設定を書いておくdatabase.yml
というファイルを作成します。中身は以下のような感じで。
development: adapter: mysql2 database: database host: localhost username: root password: xxxxxx encoding: utf8
こいつは.gitignore
に加えておきます。
app.rbをかく
そしてメインの部分を書いていきます。今回は省略して/app.rb
のメイン部分にべた書きした場合。
# app.rb require 'active_record' require 'mysql2' require 'sinatra' # Import files for database ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection(:development) class User < ActiveRecord::Base end get '/' do erb :index end post '/' do user = User.new user.email = params[:email] user.order_num = params[:order] user.save erb :index end
ActiveRecordはRailsでも使ってる分なじみがある感じで良い。object orientedな感じは若干ブラックボックス感が大きいですが直感的でやはりよいですねー。
おわり
これで一連のデータベース周りの設定はおわりです!
次はSinatraでのテストの書き方でも書いていこうかなー
diff
2015/06/07
上のdatabase.yml
では以下のようなエラーがでたので,シンボルで渡すように変更した.
DEPRECATION WARNING: Passing a string to ActiveRecord::Base.establish_connection for a configuration lookup is deprecated, please pass a symbol (:development) instead. (called from <main> at app.rb:12)
- ActiveRecord::Base.establish_connection('development') + ActiveRecord::Base.establish_connection(:development)