railsで特定のマイグレーションファイルをロールバックする

サンプル

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20210317022552  Devise create users
   up     20210317030520  Create sns credentials
  down    20210318031327  Create posts
  down    20210318044136  Create active storage tablesactive storage
  down    20210326063233  Create tags
  down    20210326063303  Create post tag relations

コマンド

// マイグレーションファイルの状態を確認                                  
%  bundle exec rake db:migrate:status   

// upのファイルをdownにし、再編集できる
bundle exec rake db:migrate:down VERSION='upのマイグレーショID' 

rails db:rollbackだと1つまえのファイルしか戻せないのでだいぶ前のファイルは上記の方がいいと思います

アプリケーションを立ち上げる手順

今回はアプリを立ち上げ、DB設計を新規appに沿って備忘録メモ

ペルソナと要件定義

ペルソナ: 今回は、30代女性
仕事と家庭、育児に大忙しのワーママ

要件定義:目的、詳細、ストーリー、優先順位を明確に
今回は、week献立保存とレシピ投稿をドッキングさせたapp

画面遷移図の作成

今回はカクーを使用して作成しました

f:id:fujifuji123412:20210309143541p:plain
画像遷移図

アプリケーション生成

# projectsディレクトリに移動
% cd ~/projects

# 新規アプリkondateのバージョンを6.0で、-dオプションでMySQLの使用を明示して作成
% rails _6.0.0_ new kondate -d mysql

# 作成したpictweetのディレクトリに移動
% cd kondate

# 現在のディレクトリのパスを表示
% pwd

githugでリポジトリ作成

  • アプリ名でローカルリポジトリ作成

  • first commitとしてコミット後、masterブランチから新しいブランチ(今回は「データベース設計」)をきる

appファイルを編集

  • config/database.yml をデータの保存形式を変更のため以下の通り編集
default: &default
  adapter: mysql2
  # encoding: utf8mb4
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

データベースを作成

  • 以下のコマンドを実行
# データベースの作成
% rails db:create
# ローカルサーバーを起動
% rails s

*ローカルホスト3000にアクセス

Mysql2::Error: Table 'users' already existsに対処するにはSHOW&DROP

エラーと戦う新米SE目指すフジフジです!
devise導入をしたブランチを削除した際に すでにusersテーブルを生成していたため MYSQLに残っていたDBがあ新たにusersテーブルをマイグレートしようとした際
Mysql2::Error: Table 'users' already exists
テーブル 'users'はすでに存在します
と怒られた そのためDBをSHOWで確認し、DROPしたのち 再度マイグレートしたらうまく行きました!

ターミナル上でDBの確認や削除の方法

準備

#appへ移動し、自分のディレクトリを確認
% cd appのディレクトリ 
% pwd
#ターミナルで以下のように入力する
% rails db

mysql>  と表示されればOK

DBの確認方法

mysql> SHOW <確認したいもの>;
#databaseの確認
mysql> SHOW DATABASES;

#tebleの確認
mysql> SHOW TABLES; 

削除方法

#databaseの削除
mysql> DROP DATABASES test_tweet-app;

#tebleの削除
mysql> DROP TABLES users; 

参考
Mysql2::Error: Table '' already existsと表示されてしまった時の対処法

はじめてデプロイをする場合の手順

Heroku デプロイをする場合の手順を備忘録!

メモ

# Heroku上で実行したいコマンドの頭には、
% heroku run 実行したいコマンド

例 post_appアプリケーションをデプロイする

はじめてデプロイをする場合

1.Herokuにアカウント登録する

【HEROKUとは】これを読めばOK!デプロイの仕方まで徹底解説 | テックキャンプ ブログ

2.Heroku CLIをインストールする 特段の理由がない場合は、その後のミスを防ぐためにも当該アプリのディレクトリにて行いましょう

% brew tap heroku/brew && brew install heroku
% heroku --version

heroku/7.40.0 darwin-x64 node-v12.16.2  #バージョンが出力される
# Herokuへログインするためのコマンド
% heroku login --interactive
  => Enter your Heroku credentials.
# メールアドレスを入力し、エンターキーを押す
  => Email:
# パスワードを入力して、エンターキーを押す
  => Password:

3.masterブランチへcommitする

4.Heroku上にアプリケーションを作成する
Heroku上でのアプリケーション名を決めることができます。すでに登録されているアプリケーション名は使用できません。そのため今回は「 post_app−1234」という名前にしました

% cd ~/projects/post_app
% pwd  #「post_appディレクトリ」にいることを確認する
% heroku create post_app−1234

5.MySQLを使用できるように設定する
Herokuでは、使用するデータベースの設定が、デフォルトでPostgreSQLになっている。
今回は、開発環境で使用しているMySQLを同様に使用するための設定を行います。ClearDBアドオンを追加することによって設定できます。

# ClearDBアドオンを追加
% heroku addons:add cleardb
Creating cleardb on ⬢ ajax-app-123456... free
Created cleardb-vertical-00000 as CLEARDB_DATABASE_URL
Use heroku addons:docs cleardb to view documentation
# 設定を変更
# ClearDBデータベースのURLを変数heroku_cleardbに格納
% heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`
# データベースのURLを再設定
% heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}

# 以下、コマンドの実行結果
Setting DATABASE_URL and restarting ⬢ ajax-app-123456... done, v◯◯
DATABASE_URL: mysql2://000000000000:0aa0000@us-cdbr-east-02.cleardb.com/heroku_aaa00000000?reconnect=true

これで、DATABASE_URLの冒頭がmysql2://に変更

6.master.keyを環境変数として設定する
設定方法は環境変数の記事に記述あります。

7.Herokuへアプリケーションの情報をpushする

# stackと呼ばれるサービスのバージョンを指定します
% heroku stack:set heroku-18 -a post_app−1234
# HerokuへPostAppを追加する
% git push heroku master

8.Heroku上でマイグレーションを実行する

% heroku run rails db:migrate

デプロイ済みのアプリケーションに変更修正を加えた場合

1.変更修正をcommitする 2.ブランチを作成していた場合は、masterブランチへマージする 2.Heroku上にpushする

3.(テーブルに変更を加えた場合は) Heroku上でマイグレーションを実行する

この手順に加え、本番環境でエラーが出ている場合は、エラーログを確認してデバッグを行う。

Heroku 環境変数の設定漏れでpush時の対処法

環境変数の設定=>commit=>pushが基本!

備忘録

開発環境(githugとHeroku)

基礎情報

credentials.yml.encファイル
=>Railsにて、外部に漏らしたくない情報を扱う際に用いるファイルです。
master.keyファイル
=>credentials.yml.encの暗号文を復号する、鍵の役割を持ったファイルのこと。 特定のcredentials.yml.encファイルのみ復号する

デプロイをする際、外部に漏らしたくない情報はセキュリティの観点から暗号化する必要があります。

本来の作業の流れ

credentials.yml.encファイルと対になるmaster.keyを環境変数として設定

#環境変数の設定方法
% heroku config:set 環境変数名="値"
#サンプル
% heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
#設定後、環境変数確認
% heroku config

コミット
プッシュ

環境変数の設定漏れでpush時の対処法

環境変数をHerokuの本番環境に反映させるためには、Herokuで環境変数を設定した上でプッシュする必要があります。
しかし、環境変数を設定し忘れた状態でプッシュしてしまった場合、環境変数を設定した上でもう一度プッシュする必要があるため、
①新しいコミット履歴がある場合(ファイルの変更履歴が存在する場合)
②ファイルの変更履歴が存在しない場合
に分けて対応方法を記述

新しいコミット履歴がある場合

環境変数を設定後以下の通り
ファイルの変更履歴が存在する場合は、Chengeに上がってくるので

コミットする
% git add .
% git commit -m "後から見てわかりやすいコミット名"
git push heroku masterを実行しましょう

先ほど作成したコミットをHerokuへプッシュ

% git push heroku master

ファイルの変更履歴が存在しない場合

Herokuの仕様上、最新のコミット履歴が存在しない状態でgit push heroku masterコマンドを実行しても下記のように「Everything up-to-date(すでに最新の状態に更新されています)」と表示されます。
環境変数を設定後以下の通り

空のコミットを生成する
% git commit --allow-empty -m "空のcommit" 

GitHub Desktopで空のコミット履歴を確認できればOK

git push heroku masterを実行

先ほど作成したコミットをHerokuへプッシュ

% git push heroku master

Fakerを使用したダミーデータの生成

Fakerというライブラリを利用してRubyでダミーデータの扱いについての備忘録

生成してくれるデータは名前、住所以外にもメールアドレスなど多岐に渡ります。

準備

ステップ1:FakerとFactoryBotをgemfileに記述

f:id:fujifuji123412:20210107131850p:plain

ステップ2:下記ソースをターミナルで実行

% bundle install

ステップ3:Faker記述のためのファイルを生成

% rails g rspec:model user
#userのfaileを生成

f:id:fujifuji123412:20210107132949p:plain

Fakerの記述しよう

今回は、FactoryBotを使用して、userモデルのインスタンスを生成するための値を設定しています。
記述例
f:id:fujifuji123412:20210107134152p:plain

ダミーデータ(戻り値)の例
ralis cでコンソール上で確認するため、
記述・ダミーデータの生成をしています f:id:fujifuji123412:20210112125406p:plain

参考
今回のサンプルでuserモデルのテストコードで使用するカラムは、
nickname
email
password
password_confirmation

deviseの仕様によりnicknameのみカラム追加済。nickname以外はデフォルトで生成されいている。

実際の記述サンプルは後日追記しよう

公式リファレンス

家族のために、ママはエンジニアを目指す

自己紹介

初めまして文系・IT未経験、30代女のフジです。

これからは、IT業界に身を投じる準備としてSEの勉強や未経験ながら感じたことを随時情報発信していこうと決意しブログを開設いたしました。

 

エンジニアを目指すきっかけ

女性には多いと思いますが、結婚を期に正社員を退職し、出産*3、子育てで社会に接触しないこと早数年。

夫が転勤族で定住に至らず正規社員も望めない現状で、

今後何かの仕事を始めても3人の子供がいれば時間もフルタイムとはいかず、
何かの資格や特技があるわけでもない。。。

自身の仕事に不安を感じていた矢先、コロナで就職は更に前途多難に。

 

焦りと自己研鑽をしている最中、拝聴していたYouTubeのマコなり社長chで

「エンジニアはパソコン1台でどこでも仕事ができるんです!」

という言葉。

 

f:id:fujifuji123412:20201127141213j:plain

目が覚めました。

 

エンジニアという仕事は「理数系のインテリ男子」という固定概念を持っていた私でしたが、

  • 文系女でもテックキャンプでなら0から目指せる
  • 田舎でもオンラインで受講可能
  • 田舎でも求人が割とある

等々に魅力を感じこれからの伸び市場のITでエンジニアを目指すことになりました!

(すでに某スクールで奮闘中です)

 

スクール選びや保育園の申請などはまた後日Upさせていただきます。