Vagrant – コマンド

Vagrant全般

ヘルプ・コマンド一覧

コマンド全体

  • vagrant -h
  • vagrant --help

サブコマンド

  • vagrant help command

Vagrantのバージョン確認

  • vagrant -v
  • vagrant --version

Box関係

Boxの一覧

  • vagrant box list

Boxの追加・削除

  • vagrant box add **/**
  • vagrant box add virtual_name box_name.box
  • vagrant box remove **/**
  • vagrant box remove box_name --box-version ****.**
  • Box削除の前にvagrant destroyで仮想マシンを削除する

Boxの更新

対象の仮想環境のディレクトリー内で実行。

  • vagrant box update

バックアップ/リストア

  • vagrant package box_name
    →現在の仮想環境をバックアップ
    →カレントディレクトリーにpackage.box作成
  • vagrant package box_name --output buckup_name.box

リストアはaddの後init。

  • vagrant add box_name backup_name.box
    →仮想環境ディレクトリーに移動
    vagrant init box_name

仮想マシン操作

仮想マシン操作は仮想マシンのディレクトリー内で。

仮想環境の一覧・動作状況

  • vagrant global-status

仮想マシンの初期化~vagrantfile作成

  • vagrant init box_name

仮想マシンの起動・停止・確認

仮想マシンに関する操作は仮想マシンのディレクトリー内で。

  • vagrant up
  • vagrant halt
  • vagrant restart
  • vagrant status

仮想マシンへの接続/接続情報確認

  • vagrant ssh
  • vagrant ssh-config

仮想マシンの削除

  • vagrant destroy id
    • idvagrant global-statusで確認
    • Boxを削除する前に仮想マシンを削除する

Snapshot~スナップショット

  • 対象の仮想マシンのvagrantfileがあるディレクトリーで実行
  • vagrant haltで停止しなくても、snapshot実行時に一時仮想マシンを停止して再起動してくれる

スナップショットの保存

vagrant snapshot save snapshot_name

スナップショットの一覧

vagrant snapshot list

スナップショットの復元

vagrant snapshot restore snapshot_name

スナップショットの削除

vagrant snapshot delete snapshot_name

 

Rails – モデル生成とマイグレーション

概要

Railsでは、データベースのテーブルをモデルを通して扱う。そのための開発時点での操作は以下のとおり。

  1. モデルの生成・操作
  2. マイグレーションによるテーブルの生成・操作

モデルの生成・削除

モデルの生成

テーブルに対して1つのモデルを生成する。

基本形は以下のコマンド。

rails generate model model_name

生成時にテーブルのフィールド名とフィールドの型を指定する場合(フィールド指定の間はスペース)。

rails generate model model_name col1:type col2:type ... 

フィールドの型

  • primary_key
  • binary, boolean
  • date, datetime, time, timestamp
  • decimal, float, integer
  • string, text

生成されるファイル

実行後、モデルクラスとマイグレーションの2つのクラスファイルが生成される。

モデルクラスファイル

app_name/app/models/model_name

  • ファイルの内容はクラス定義
  • クラス名はモデル名のパスカルケース(ModelName)
  • ApplicationRecordを継承

マイグレーションファイル

app_name/db/migrate/yyyymmddhhmmss_create_model_name.rb

  • テーブルを扱うマイグレーションクラスが定義される
  • マイグレーションクラスはActiveRecordモジュールのMigrationクラスを継承している
  • マイグレーションクラスのクラス 名はCreateModelNames
    • パスカルケース
    • 最後にsがついた複数形
  • マイグレーションクラスのcreate_tableはDSL(ドメイン固有言語、Railsdoc)
    • テーブル名はスネークケースでモデル名の複数形
    • 生成時にフィールド名と型を指定した場合、create_tableブロック内でフィールドが定義される

モデルの削除

モデルの削除は以下のコマンドで、モデルクラスファイルとマイグレーションファイルが削除される。

rails destroy model model_name

ただしデータベース上のテーブルは削除されない。

テーブルの生成・削除

テーブルの生成

以下のコマンドで、マイグレーションファイルの設定に従ってデータベースにテーブルが生成される。

rails db:migrate

モデル生成時にフィールドを指定しなかった場合やモデル生成後にフィールドを追加する場合は、マイグレーションファイルにフィールドを追加する。

一度migrateした後にマイグレーションファイルを修正して再度migrateしても反映されない。一旦rails db:rollbackでテーブル生成前の状態に戻してからマイグレーションファイルを修正して再度実行。

テーブルの削除

ロールバック

  • rails db:rollbackで直前に生成したテーブルを削除

MySQLでの削除

  • MySQLのコンソールでDROP TABLEを実行

マイグレーション

model_nameモデルのmodel_namesテーブルを例にとる。

  • model_nameモデルを削除
    • rails destroy model model_name
  • 以下のコマンドでダミーのマイグレーションファイルを生成
    • rails generate migration 任意の名前
  • マイグレーションファイルのdef changeブロックに以下を追加
    • drop_table: model_names
  • rails db:migrationを実行
  • db/migrate/マイグレーションファイルを削除

実行例

 モデルの生成

demo_recordという名前でモデルを生成する。このモデルはname:stringage:integerの2つのフィールドを持つモデルを生成する。

モデルファイル

モデルファイルがapp/modelsの下に作成される。モデルファイル名はモデル生成時のモデル名のスネークケースになっている。

モデルファイルの内容はモデルクラスの定義で、生成当初は空の定義。モデルクラス名がモデル名のパスカルケースになっている。

マイグレーションファイル

マイグレーションファイルがdb/migrateの下に作成される。

マイグレーションファイルの内容はテーブル生成クラスの定義で、create_tableブロックの中でフィールドの名前と型を指定している。

  • モデル名demo_recordに対して生成されるテーブルクラス名はCreateDemoRecordsで、接頭辞Createにモデル名に複数形のsがついたパスカルケース
  • create_tableブロックでフィールドの型とフィールド名を定義

テーブルの生成~マイグレーション

rails db:migrateコマンドにより、マイグレーションファイルの設定に基づいてテーブルを生成する。

rails dbconsoleでテーブルが生成されていることを確認する。

生成されたテーブルの構成を確認。

マイグレーションの状態確認

db:migration:statusでマイグレーションの状況を確認できる。部分的にロールバックした時などの確認に便利。

ロールバック

すべてロールバック

rails db:rollbackにより、いったんテーブル作成前の状態に戻す。

MySQLで確認すると、テーブルはなくなっている。

ロールバックステップ指定

rails db:migrate STEP=nでロールバックするステップ数を指定可能。STEPは大文字でないと機能しない。

 

マイグレーションファイルへの追記

マイグレーションファイルに新たなフィールドを1行追加する。

再度マイグレート。

MySQLで確認すると、テーブルが作成されている。

新たなフィールドが追加されているのが確認できる。

 

Vagrant – Atomを使う

方法1~共有フォルダ-

共有フォルダにあるファイルをホスト側のAtomで開く。

ただし、Railsのファイルを編集している場合、いったんRailsサーバーを立ち上げなおさないと内容が反映されないという症状が出た。

方法2~AtomからFTP接続

remote-ftpのインストール

AtomにFTP接続用のパッケージをインストールして接続する。

手順

  1. File → Settings→Installからremote-ftpを検索してインストール
  2. AtomからホストのVirtualBoxの仮想マシンフォルダーを開く(C:\vagrant\centos7)
  3. Packages→Remote FTP → Create SFTP config file
  4. Atomで開いた.ftpconfigファイルの内容を編集

.ftpconfigファイルの編集

.ftpconfigファイルの編集に必要な情報は、コンソールからvagrant ssh-configコマンドで表示させる。

この情報に基づいて.ftpconfigを編集。

接続

  1. Packages→RemoteFTP→Toggle
  2. Remoteタブ表示
  3. Connectボタンをクリック

トラブル

ERBファイル

Railsのerbファイルに色がつかない。config.csonを編集してみたが効果がなかった。

原因はtree-sitter parserのバグが考えられ、以下で対処。

  1. Settings→Coreの”Use Tree Sitter Parsers”のチェックを外す
  2. 再起動→チェックが外れているという警告は無視

 

Vagrant/CentOS7 – Railsのインストール

概要

Vagrant + VirtualBox + CentOSの環境にRuby、MySQLをインストール後、Railsをインストールするのにいろいろと躓きながら進めた記録。

構成

  • Vagrant : 2.2.14
  • VirtualBox : 6.1.18
  • Box : bento/CentOS-7.7
  • mysql : Ver 8.0.23 for Linux on x86_64
  • Ruby : ruby 3.0.0p0
  • Rails : Rails 6.1.3

インストール概略

階層が下のものは今回必要になったもの。

  • SELinux、firewalldの停止
  • Railsインストール
    • sasscインストール
      • g++インストール
    • mysql-develインストール
      • Node.jsインストール
  • Railsサーバー実行
    • webpackerインストール
      • Node.jsインストール(再掲)
      • Yarnインストール

利用手順

アプリケーション生成

sqlite3がデフォルトで未インストールではエラーが出るため、コマンドラインでmysqlを指定。

  • rails new app_name -d mysql
  • rails new app_name --database=mysql

database.ymlの修正

データベースを使わない場合は、development、test、productionの各database:をコメントアウト/削除。

Railsサーバー起動

アプリケーションディレクトリー内で以下を実行。

rails s -b 0.0.0.0

ブラウザから以下でアクセス。

localhost:3000

Railsに影響する機能の停止

Railsをインストール・稼働させるにあたって、Railsに影響を与える機能を停止させる。

SELinux

アクセス制御機能のSELinuxのステータスがEnforsingの場合にはPermissiveになるよう設定する。

firewalld

ファイアーウォール・サービスfirewalldが有効の場合は無効化する。

Railsのインストール

Rails本体のインストール

インストール後のバージョン確認。

エラー1~アプリ生成時~sassc

sasscパッケージがない

Railsインストール後にアプリケーションを生成しようとすると、sasscインストール時にエラーとなる。

sasscインストール時にg++がない

メッセージに従ってsasscをインストールしようとするとエラーになる。g++がないのが原因らしい。

参考サイト:centos7でsassc 2.0.0 with native extensionsのインストールに失敗

gcc-c++はあるようだが・・・

インストールしてみる。

sasscのインストール成功

gcc-c++をインストールしてみると、無事sasscがインストールできた。

エラー2~アプリ生成時~sqlite3

sqlite3エラー

再度アプリケーションを生成すると、まだsqlite3に関するエラーが残っている。使いたいのはmysql。

mysql-develのインストール

mysqlを使いたいので、mysql-develの存在を確認。

yum list | grep mysql-devl

存在しない場合はインストール。

Node.jsがないというエラー

生成時にエラーが発生したアプリケーションをいったん削除し、データベースにmysqlを指定してアプリケーションを生成。

railsサーバー起動でもエラー

webpackerエラー

ここでいったんrails sでサーバーを起動すると、webpackerの設定ファイルがないというエラー。

webpackerインストールエラー

webpackerインストール時の”Please run rails webpacker:install”に従ってインストールしようとすると、ここでも”Node.jsがない”というエラーが出てサーバーが起動しない。

Node.jsのインストール

アプリケーション生成時、Railsサーバー実行時に共通してNode.jsに関するエラーが出ているので、Node.jsをインストール

当初、最新版のv15.10.0をインストールした。

再度webpackerインストールでエラー

再度webpackerをインストールしようとすると、Node.jsの警告とYarnに関するエラーが出てストップ。

Node.jsのダウングレード

Node.jsの警告も気持ち悪いので、ダウングレード。

ダウングレードしたNode.jsを使用。

ここで再度webpackerをインストールしようとすると、まだ”Yarnがインストールされていない”というエラーが残っている。

Yarnのインストール

npmでYarnをインストールする。

参考:Yarn公式サイト

webpackerインストール

Node.jsとYarnがそろったので、webpackerがインストールできた。

Railsサーバー起動・接続

vagrantfile設定

vagrantfileには以下の1行を設定している。

サーバー起動・接続

ここでrails sでサーバーを起動するが、ブラウザーがつながらない。

参考サイト(Rails4.2:Vagrant上の仮想マシンで起動したRailsにホストのブラウザからアクセス出来ない)のおかげで、Railsサーバーを以下で立ち上げるとよいことが分かった。

この状態で、ホストのブラウザーからlocalhost:3000でつながった。

アプリケーション生成~成功

ここで再度アプリケーションを生成して成功。

viなどでdatabase.ymlを修正。

Railsサーバー起動。

ホストのブラウザーからlocalhost:3000で接続。

Linux – Node.jsのインストール

概要

Vagrant + VirtualBox + CentOS7でRailsをインストールする際にNode.jsが必要になったのでインストール。

参考サイト:CentOS 7 Node.js のインストール手順 (yum を利用)

準備~nvmのインストール

nvmはNode.jsのバージョン管理ツール。Gitでnvmをクローン。

インストール可能なNode.jsの確認

インストール可能なNode.jsのバージョンを確認。

インストール

最新の安定板のインストール

nvm install stableで最新の安定板がインストールされる。

指定バージョンのインストール

RailsではNode.jsが必要となるが、最新バージョンだとunstableだと警告が出ることがある。Node.jsのバージョンを下げるときは、バージョンを指定してインストール。

指定バージョンの使用

デフォルトバージョン以外のNode.jsを使うときは以下のコマンド。

nvm use *.*.*

インストール済のNode.jsの確認

デフォルト・バージョンの変更

デフォルトバージョンの変更は以下のコマンド。

nvm alias default *.*.*

上記を実行しただけでは反映されない。

再起動することでデフォルト設定が反映される。

指定したバージョンの削除

以下のコマンドでバージョンを指定して削除。

nvm uninstall *.*.*

確認。

 

Linux – firewalld

概要

firewalldはファイアーウォールの機能を提供するサービス。

ステータスの確認

ステータスの確認にはsystemctlコマンドを使う。

active (running)の場合は実行中、inactive (dead)の場合は停止中。

ステータスの設定

ステータスの設定・変更には、suでsystemctlコマンドを使う。

firewalldの有効化

有効化はsudo systemctl start firewalld

firewalldの無効化

無効化はsudo systemctl stop firewalld

 

Linux – SELinux

概要

SELinuxはシステムへのアクセス制御のための機能。

ステータスの確認

SELinuxの動作状況はgetenforceコマンドで確認。

ステータスは3種類。

Permissive
アクセス制御は無効、警告メッセージを表示。
Enforcing
アクセス制御が有効。
Disabled
SELinuxは無効。

ステータスの変更

一時的な設定~setenforce

suでsetenforceコマンドを使い、Permissive/Enforcingを設定。

sudo setenforce 0/1

0でPermissing、1でEnforcing

起動時の設定~/etc/selinux/config

/etc/selinux/configファイル中、SELINUXの行をコメントアウトして設定すると、起動時のステータスが設定される。

 

Vagrant – MySQLのインストール – CentOS7

概要

Vagrant + VirtualBoxのCentOS7にMySQLをインストールした記録。

yumによるMySQLサイトからのダウンロード実行などのほか、パスワード設定でちょっと時間がかかった。

インストール

参考にさせていただいたサイト:【最新版】CentOSにMySQLをインストールする方法

レポジトリーへの登録

予めコンソールでVagrantのCentOSを起動しておき、MySQL Community Downloadsサイトで以下の作業。

  1. Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Packageの”Download”をクリック
  2. ダウンロードページの下部、”No thanks, just start my download.”を右クリックしてURLをコピー
  3. CentOSのコンソールでsuとして以下を実行して、yumレポジトリーに追加

レポジトリーの確認

MySQLがレポジトリーにあることを確認。レポジトリーは/etc/yum.repos.d/に格納されている。

mysql-community-source.repomysql-community.repoの2つが確認できる。

MySQLのインストール

まだMySQLはレポジトリーに登録されただけなので、suでyumを使ってインストール。4分ほどかかった。

インストール確認

インストールされたMySQLのバージョンを確認。

MySQLの起動・停止

インストール直後の停止状態確認

状態確認は一般ユーザーでもsystemctlで可能。

MySQLサーバーの起動

起動するにはsuとしてsystemctlを実行する必要がある。

起動状態の確認

MySQLサーバーの停止

停止するにはsuとしてsystemctlを実行する必要がある。

パスワードの変更

初期状態でパスワードがわからない

MySQLインストール直後にrootでログインしようとしたとき、パスワードがわからずログインできなかった。

ログファイルの確認

初期パスワードはログファイルに残されているとのことで、ログからパスワードを確認。

参考にさせていただいたサイト:MySQL 5.7 をインストールしたら最初に行うセットアップ

ログイン成功

このパスワードを入力して無事ログイン。

最初のパスワード変更(強い制約)

CentOSのコマンドラインからmysql_secure_installationでパスワードを変更。このとき、デフォルトでパスワードに強い制約がかかっていて戸惑った。

  • ルートのパスワードを変更するか
  • anonymusユーザーを消すかどうか
  • リモートでのrootのログインを禁止するかどうか
  • テスト用のデータベースを削除するかどうか
  • 権限テーブルを再読み込みするかどうか

パスワード制約条件の変更

この時点のバージョンでは、パスワード検証の変数名がネット上の情報と少し違っていた。

パスワード制約の変更

パスワード制約の強度を一番低くし、文字数を6文字以上とした。

MySQLのUPDATEはエラー

MySQLのUPDATEでパスワード変更しようとしたが文法エラーで通らない。

mysqladminでパスワード変更に成功

CentOSのコマンドラインに戻ってmysqladminを試したところ、パスワード変更に成功。

 

Vagrant/CentOS7 – rbenv/Rubyインストール

概要

VagrantのCentOS7仮想環境にrbenv&Rubyをインストールした記録。

  • ホスト:Windows10
  • ゲスト:Vagrant + VirtualBox + bento/CentOS-7.7

Gitのインストール

yumによるGitのインストール

suでyumを実行してGitをインストールする。

確認

rbenvのインストール

ユーザー環境へのrbenvのダウンロード

カレントディレクトリーの確認。

Gitでユーザー環境にrbenvをclone(ダウンロード)。

/home/vagrand下に.rbenvフォルダーが作成され、その下にフォルダー・ファイル群が展開される。

.bash_profileの設定

$PATHの確認

.bash_profileの確認

PATHの追加

$echo 'export PATH=通したいパス:$PATH' >> .bash_profile

rbenvの場合は

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

起動時のrbenv init実行設定

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

設定後の.bash_profile

.bash_profileを修正したら、ターミナルを再起動して.bash_profileを反映させる。

rbenvの確認

ruby-build

ユーザー環境へのruby-buildのダウンロード

Gitでユーザー環境にruby-buildをclone(ダウンロード)。

Ruby

ライブラリーのインストール

gcc, make, openssl-devel, readline-develが必要になるので、yumでインストール。

インストール可能なパッケージの確認

ruby-envでインストール可能なパッケージを確認する。

  • -listは最近の安定バージョンのみ表示
  • --list-allはインストール可能な全バージョンを表示

Rubyのインストール

今回は3.0.0をインストール。3~4分ほどかかった。

デフォルトのRubyの設定

通常使うRubyにダウンロードした3.0.0を設定。

確認

参考サイト

 

Vagrant – 共有設定・カーネル更新

概要

  • Vagrantの仮想環境での共有フォルダ-設定
  • 環境はWindows10、Vagrant、VirtualBox、bento/Centos-7.7
  • この過程でカーネルのアップデートが必要

Vagrant初期起動

bento/Centos-7.7の前にCentos/7のBoxで共有設定をしたときにvagrant-vbguestパッケージをインストール済みだったので、GuestAdditionsの不整合は解決されている様子。

ただしkernelのバージョン不整合は解決されない。

SSH接続・カーネルアップデート

  • VagrantからSSH接続して仮想環境にログイン
  • 仮想環境下でyumによってカーネルをアップデート

Vagrant再起動

  • exitで仮想環境から抜けてホスト環境に戻る
  • ホスト環境でVagrantを再起動
  • ここでかなり時間をかけて環境設定が行われる

共有設定・再起動

  • 共有設定の最終段階
  • ホスト側の共有フォルダ-を作成
  • vagrantfileに1行追加
  • vagrant reloadでVagrantを再起動
  • 仮想環境下にもフォルダーが作成され、同期される

vagrantfile設定

config.vm.synced_folder "ホスト側パス", "ゲスト側パス"

  • 第1引数はホスト側パスで、vagrantfileからの相対パスで指定
    • ホスト側で共有ディレクトリーを作成しておく必要がある
  • 第2引数はゲストパスで、絶対パスで指定
    • ゲスト側の共有ディレクトリーはVagrantが作成してくれる

Vagrant再起動

Vagrantを再起動すると、共有フォルダ-が作成される。

フォルダー配置

  • ホスト側:C\vagrant\centos7\share
  • ゲスト側:/home/vagrant/share