Sinatraで環境構築・データベース連携
前説
お久しぶりです。色々あって休んでしまいました。心機一転!頑張っていこうと思います。
目的
- Sinatraで環境構築
- アプリを一つ作る
- SQL、ActiveRecord、Gemに対する少しの理解
Railsを用いてアプリを作っていましたが、Railsはフルスタックなフレームワークなので、根本のシステム構成の理解が乏しい感じがしました。そのため、今回はSinatraを用いての開発です。
手順
- プロジェクト作成
- Gemfile作成
- Sinatra、MySQL、ActiveRecord導入
- データベース作成
- view、main.rbを書いていく
プロジェクト作成
Gemfile
Gemfile
Gemfileからbundle installをしたいのですが、SinatraではGemfileを作成しないといけません。
以下のコマンドを打つと、Gemfile生成ができます。
Railsの時のようにGemfileにgemを書いてインストールしていきます。
$ bundle init
#frozen_string_literal: true
source "https://rubygems.org"
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
gem 'sinatra'
gem 'mysql2'
gem 'activerecord'
gem 'rake'
gem 'sinatra-activerecord'
gem 'pry'
gem 'bcrypt'
色々入れました!!
$ bundle install
MySQLとの連携、ActiveRecord導入
私はMySQLを使うことができました。SQL文でデータベースとテーブルを作成してみましょう。
gemでの名前はmysql2なのでご注意ください。
mysql2というgemを使うことによって、MySQLと連携できます!
$ mysql -u root
mysql>
これでMySQLにrootユーザーでログイン。
Sequel Proというアプリを使うと、GUIでデータベースやテーブルを確認できます!
ここでSQL文でテーブルを作っていきます。
mysql>CREATE [DATABASE_NAME];
mysql>USE [DATABASE_NAME];
mysql>CREATE TABLE [TABLE_NAME] (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
email VARCHAR(255) NOT NULL,
url VARCHAR(255) NOT NULL,
user_id INT UNSIGNED NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
PRIMARY KEY(id)
);
私はRSSで情報をスクレイピングするまとめサイトのようなサイトを作るので以上のようなカラム設計となります。
PRIMARY KEY(id)は忘れないでください。
[TABLE_NAME]は小文字複数形で
mysql>SHOW [TABLE_NAME];
mysql>SHOW COLUMNS FROM [TABLE_NAME];
カラムを確認できます。
しかし、このままではSinatraのコードにSQL文を書かないといけません。
ここでActive Recordが役に立つのです。
SinatraのプロジェクトフォルダのRootディレクトリにdatabase.ymlを作成
これでMySQLで作成したデータベースに接続してくれます!
今回はdevelopment環境のみ。
development:
adapter: mysql2
database: [DATABASE_NAME]
host: localhost
username: root
password: [私の場合は空白]
encoding: utf8
test:
production:
main.rbです。
#Gemfileからrequire
require 'bundler'
Bundler.require
require 'rss'
#database.ymlを読み込んでくれえ
ActiveRecord::Base.configurations = YAML.load_file('database.yml')
#development設定でお願い
ActiveRecord::Base.establish_connection(:development)
class [TABLE_NAMEを単数形にして頭文字を大文字] <ActiveRecord::Base
#値が空でないか
validates_presence_of :name
validates_presence_of :url
end
#ルーティング
get '/' do
erb :index
end
index.erbをViewsフォルダの中にで作成すればいい!
$ ruby main.rb
もし何か不具合あればおしらせください!
次回
user管理や踏み込んでその他諸々を書いていきます。
参考文献
Author And Source
この問題について(Sinatraで環境構築・データベース連携), 我々は、より多くの情報をここで見つけました https://qiita.com/rockguitar67/items/ee2d2514fd34652d85c6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .