さくらVPSでCentOS7 １１．RailsプロジェクトをGitで共同開発

#はじめに
自由にテスト出来るLinuxのサーバーがほしくて、さくらVPSで構築してみました。
順次手順をアップしていく予定です。

前回インストールしたRuby On Railsを共同開発できるようにGitで管理したいと思います。

#目次

1. [申し込み](https://qiita.com/Qsugi/items/9239f93f35967e567b5b)
2. [CentOS7インストール](https://qiita.com/Qsugi/items/4cc4ba9983191a306b19)
3. [SSH接続](https://qiita.com/Qsugi/items/45772c8a71a31bd0d3c8)
4. [Apache・PHPインストール](https://qiita.com/Qsugi/items/bf9740f31b4c42eaad91)
5. [MariaDBインストール](https://qiita.com/Qsugi/items/7798669338b555f4ea8d)
6. [FTP接続](https://qiita.com/Qsugi/items/6f383694f60913abb948)
7. [sftp接続](https://qiita.com/Qsugi/items/a8328a116218b058a8bf)
8. [phpMyAdminインストール](https://qiita.com/Qsugi/items/8b6f5b457285140b2ca2)
9. [環境のバックアップ](https://qiita.com/Qsugi/items/a83076eb657157f12f17)
10. [Ruby On Railsインストール](https://qiita.com/Qsugi/items/c7e69a6761f125846bff)
11. RailsプロジェクトをGitで共同開発

#１１．RailsプロジェクトをGitで共同開発

前回、[Ruby On Railsインストール](https://qiita.com/Qsugi/items/c7e69a6761f125846bff)時に作成したテスト用プロジェクトHelloWorkdを共同開発できるようにGitで管理したいと思います。

共同開発用のマシンは、ローカルのWindows10のマシンにします。
構成は、こんな感じです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/74712cde-def2-7231-9252-fc13aaf877dd.png">

共有リポジトリ（リモートリポジトリ）は、サーバーに配置して複数人で共有するためのリポジトリです。
共有リポジトリは、GitHub等を使う方法もありますが、今回はプロジェクトの有るさくらVPSサーバー内に作成します。

Gitでは、開発マシンのソースを直接本番ソースにアップするのではなく、一度共有リポジトリにアップ(プッシュ)したものを本番ソースから取りに行く(プルする)形になります。
サーバーにある本番ソースもローカルマシンの開発ソースと同様ローカルポジトリですので、開発側がアップした変更は手動で本番ソースに取り込む必要があります。
これだと不便ですので、共有リポジトリが変更を受け取った時自動的に本番ソースが取りに行くように設定します。

##さくらVPSにGitインストール

###インストール

```
$ sudo yum install git-all
```

###インストール後の設定
ユーザ名とメールアドレスを設定します

```
$ git config --global user.name "sakura"
$ git config --global user.email sakura@kogueisya.com
```

gitの出力をカラーリング

```
$ git config --global color.ui auto
```

ディフォルトエディタの設定

```
$ git config --global core.editor vim
```

エイリアス設定（「checkout」を「co」に設定）

```
$ git config --global alias.co checkout
```

確認

```
$ git config user.name
sakura

$ git config -l
user.name=sakura
user.email=sakura@kougeisya.com
color.ui=auto
core.editor=vim
alias.co=checkout
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

$ cd
$ cat .gitconfig
[user]
        name = sakura
        email = sakura@kougeisya.com
[color]
        ui = auto
[core]
        editor = vim
[alias]
        co = checkout
```

##共有リポジトリ（リモートリポジトリ）作成

まず、複数人で共有するためのリポジトリを作成します。
共有リポジトリは、作業用のディレクトリ・ファイルを持たず管理用のファイルのみの『ベアリポジトリ』にします。

さくらVPSサーバーの/optに共有リポジトリを作成します。

###共有リポジトリ用ディレクトリ作成
/optの中に「プロジェクト名.git」というフォルダを作成します。

```
$ sudo mkdir -p /opt/helloworld.git/
```

-pは/optフォルダがなければ作成します。

###所有者変更
フォルダの所有者を [「4．Apache・PHPインストール」](https://qiita.com/Qsugi/items/bf9740f31b4c42eaad91)で作成したWebコンテンツ操作用のグループ（webadmin）にします。

```
$sudo chown root:webadmin /opt/helloworld.git/
$sudo chmod 2775 /opt/helloworld.git/ -R
```

###共有リポジトリをベアリポジトリで作成

```
$ cd /opt/helloworld.git
$ git init --bare --share
Initialized empty shared Git repository in /opt/helloworld.git/
```

---bareは、ベアリポジトリを作成するオプション
--shareは、ベアリポジトリを複数のユーザによって共有可能にするオプション

##本番ソース
さくらVPSサーバーの中に前回[「10．Ruby On Railsインストール」](https://qiita.com/Qsugi/items/c7e69a6761f125846bff)で作成したHelloWorldプロジェクトを本番ソースとします。
この本番ソースにローカルリポジトリを作成し、共有リポジトリ（リモートリポジトリ）にプッシュします。

###リポジトリのセットアップ

本番ソースのディレクトリに移動し、ローカルリポジトリを作成します。

```
$ cd /var/www/app/HelloWorld
$ git init
Reinitialized existing Git repository in /var/www/app/HelloWorld/.git/
```

###除外ファイル指定
共有の必要がないファイルは、除外ファイルに指定します。
railsコマンド実行時に作成される.gitignoreファイルにリポジトリから除外するファイルを指定するためのルールが記載されています。
このファイルに以下を追加します。

```
$ vi .gitignore
```

```
# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret
```

###ファイルをインデックスに追加（addコマンド)

本番ソースのファイルをコミット待ちの変更が格納される「ステージングエリア」という一種の待機場所に追加します。

```
$ git add .
```

確認
ステージングエリアにあるファイルのリスト表示

```
$ git status
```

###コミット

本番ソースのローカルリポジトリへの変更反映します。

```
$ git commit -m "Initalize repository"
```

コミットメッセージの履歴参照

```
$ git log
commit d3f7327c74c7175b75ca7d78f4a1cd576f5b6d9a
Author: sakura <sakura@kougeisya.com>
Date:   Mon Dec 2 15:49:37 2019 +0900

    Initialize repository
```

###共有リポジトリ（リモートリポジトリ）にプッシュ

本番ソースのローカルリポジトリを共有リポジトリにプッシュします。

まずリモートリポジトリのアドレスに「origin」という名前を付けて記録しておきます。
（「origin」にしたのは、pushやpullコマンドは実行時にリモートリポジトリ名を省略するとoriginという名前を使用する為）
この作業は、本番ソースのディレクトリで行います。

```
$ git remote add origin /opt/helloworld.git
```

本番ソースのローカルリポジトリを共有リポジトリにプッシュします。
この作業も、本番ソースのディレクトリ内です。

```
$ git push -u origin master
Counting objects: 6674, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6272/6272), done.
Writing objects: 100% (6674/6674), 29.86 MiB | 8.65 MiB/s, done.
Total 6674 (delta 909), reused 0 (delta 0)
To /opt/helloworld.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
```

-uオプションは、「git push -u origin master」とすると次回から「git push」だけでpushしてくれます。

以上で、本番ソースが反映された共有リポジトリが出来ました。

##本番ソース反映の自動化

開発用ローカルマシン（Windows10等）で変更した内容は、共有リポジトリにプッシュします。
この時点で、共有リポジトリは最新データになります。

しかし、本番ソースのリポジトリは、開発ローカルマシンのリポジトリと同様ローカルポジトリですので、本番ソース側から取り込む作業（プル）しない限り、本番ソースのリポジトリは古いままです。
開発側がアップした変更は手動で本番ソースに取り込む必要があります。

これだと不便ですので、共有リポジトリが変更を受け取った時、自動的に本番ソースが取りに行くように自動化します。

自動化にはフックを使います。
フックは、Gitでコマンドを実行する直前もしくは実行後に特定のスクリプトを実行する為の仕組みです。

フックの種類（サーバーサイド）

|フック|概要|
|:--|:--|
|pre-receive|クライアントからpushを受け取った直後に起動。<br>更新内容の確認が可能。|
|post-receive|push内容の適用終了後起動。<br>通知を行う場合に便利。|
|update|pushによる更新対称ブランチごとに起動。|

共有リポジトリの中にある「hooks」の中に、フック名のスクリプトファイルを作成することで実現できます。

今回は、開発のローカルリポジトリからプッシュされ、その内容が適用された後に本番のローカルリポジトリからプルするスクリプトを実行したいので、「/opt/helloworld.git/hokks/post-receive」というスクリプトファイルを作成します。
スクリプトの内容は、本番ソースのドキュメントルートに移動し、publlを実行します。

```
$ vi /opt/helloworld.git/hooks/post-receive
```

```
#!/bin/sh
cd /var/www/app/HelloWorld/
git --git-dir=.git pull
```

スクリプトファイルを他のユーザから実行できるようにパーミッションを設定します。

```
$ chmod 755 /opt/helloworld.git/hooks/post-receive
```

以上でサーバー側の設定は完了です。

##開発用ローカルマシン（Windows10)の設定
###各ツールのインストール
Ruby、Rails、Git等をインストールしていきます。
####Rubyインストール
下記サイトからダウンロードします。
最新版の「Ruby+Devkit 2.6.5-1 (x64)」をダウンロードしました。
https://rubyinstaller.org/downloads/
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/aa02c90c-64e2-b7e0-9dd5-897111c45239.png" width="600px">
ダウンロードしたファイルを実行すると下記の画面が表示されます。
「◎I accept the License」を選択し[Next>]をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/3f11dc05-c8f1-755c-e088-cfc9d43dadec.png">
下記画面が表示されたら、チェックボックス３つともチェックをいれ、[Install]をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/5c99c6ad-e78a-97dc-dd24-08fdc84f6f67.png">
下記画面が表示されたらそのまま[Next>]をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/17e5b33c-f8f9-53b8-f908-df24695703b9.png">
下記画面のようにインストールが開始されますので、終わるまでしばらく待ちます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/76c32d8b-efb7-5b13-6619-7691c60f53b8.png">
インストールが終了すると、下記画面が表示されます。
そのまま[Finish]をクリックすると画面が閉じ、インストールが完了します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/70a6840b-4dfd-d550-d811-12c1932bfffa.png">
引き続き下記の画面が開きます。
1,2,3と入力して[Enter]キーを押すとインストールが開始されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/cf7c7923-7bc7-09d8-0d0f-206e14b36d77.png">
インストールが完了すると下記画面のように「Which components shall be installed? If unsure press ENTER []」と表示されますので、[ENTER]キーを押すと画面が閉じます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/288fa0f9-58b0-fce9-fbf6-0731236fd1ec.png">


####Railsに必要なgemをインストール
#####SQLite3インストール
コマンドプロンプトを開き、以下を実行します。

```
> ridk exec pacman -S mingw-w64-x86_64-sqlite3
```

下記画面のように「インストールを行いますか? [Y/n]」と聞いてきますので「Y」を入力します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/8f2a1363-79dd-4f69-f48e-eacb597b8596.png">
プロンプトに戻ったらインストール終了です。
引き続き以下のコマンドを実行します。

```
> gem install sqlite3 --platform ruby
```

下記画面のようにプロンプトに戻ったら完了です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/0ab4768b-dc0c-0e66-e35f-fb4607191941.png">

#####nokogiriインストール
コマンドプロンプトで以下を実行します。

```
> ridk exec pacman -S mingw-w64-x86_64-libxslt
```

下記画面のように「インストールを行いますか? [Y/n]」と聞いてきますので「Y」を入力します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/98b91ced-5b51-16fd-982a-47341fa245b5.png">
プロンプトに戻ったらインストール終了です。
引き続き以下のコマンドを実行します。

```
> gem install nokogiri --platform ruby -- --use-system-libraries
```

下記画面のようにプロンプトに戻ったら完了です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/621a0b75-9918-ec70-189b-9b563538957e.png">

#####Node.jsインストール
下記サイトからダウンロードします。
https://nodejs.org/ja/download/
「LTS推奨版」「Windows Installer (.msi)」の「64-bit」をダウンロードしました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/2dac0126-3a59-c699-2ccc-00647448916e.png" width="600px">
ダウンロードしたファイルを実行すると下記の画面が表示されますので[Next]をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/2d7483a4-8b03-1a06-90e1-ca1084f65006.png">

下記画面が表示されたら「□I accept the terms in the License Agreement」にチェックを入れ[Next]をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/972ad92a-dbba-77f4-6fab-308ff9034af3.png">

下記画面が表示されますので、そのまま[Next]をクリック。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/20eb9e31-0773-62b7-98ed-c96950fa6ae3.png">

下記画面もそのまま[Next]クリック。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/e0cc568a-b45d-b277-e009-5592581e49b7.png">

下記画面が表示されたら「Automatically install the ・・・」にチェックをいれて[Next]をクリック。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/45879ec5-13bd-01a4-0e85-bb246262958c.png">

下記画面の[Install]クリックで、インストールが開始されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/85166790-5379-2ae9-18e8-6f5f1780abec.png">

インストールが終わるまでしばらく待ちます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/8b6b1969-37dc-9983-87d5-69ee13c2bb4a.png">

インストールが終わると下記画面が開きますので[Finish]をクリックすると画面が閉じます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/1b206ddb-4a52-67dd-399c-b559232a7f33.png">

引き続き下記の画面が開きます。
「継続するには何かキーを押してください ．．．」と2回表示されますので都度[Enter]キーを押してください。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/2e0866e4-287c-f9e7-7760-80e0e86d2f2a.png">

下記の画面が開き、インストールが開始されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/00b114d4-bdc6-4c13-e1e1-0318874fb457.png">

下記のように「Tyoe ENTER to ext:」と表示されたら完了です。
[Enter]キーを押すと画面が閉じます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/e2953717-8478-742e-232e-a0929d4513f4.png">

#####Bundlerインストール
コマンプロンプトを開き下記のコマンドを実行します。

```
> gem install bundler
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/5439e408-5b5f-8ca9-1e5f-c59445991437.png">

####Gitインストール
GUIでGitが使えるTortoiseGitを使います。
画面のキャプチャは取っていませんでしたm(__)m

#####Git For Windows
下記サイトの[Download]ボタンよりダウンロード
ダウンロードしたファイルを実行し、画面に従いインストール
https://gitforwindows.org/
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/e03bd94f-6b61-234b-1448-be51ff1411b0.png" width="600px">

#####TortoiseGit
下記サイトのfro 64-bit Windowsの「Download TortoiseGit 2.9.0-64.bit(~19.5Mib)」をクリックしてダウンロード
ダウンロードしたファイルを実行し、画面に従いインストール
https://tortoisegit.org/download/
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/15fab109-6f3a-5101-e6c6-344ef4f5a2df.png" width="600px">

#####メニュー等を日本語に設定
下記サイトからLanguage PacksのJapanese 64Bitの[Setup]をクリックしてダウンロード
ダウンロードしたファイルを実行し、画面に従いインストール
https://tortoisegit.org/download/
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/f553becc-cd35-8a67-c0d6-021a33d97c25.png" width="600px">
インストール後、デスクトップの適当な場所で右クリックし表示されるメニューから[TortoisGit]-[設定]を選択
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/44ec0be7-8c25-2199-ec95-a0e2c63f3c43.png">
開いた画面の[全般][TotoiseGit][言語(Language)]より「日本語（日本）」を選択、[OK]ボタンをクリック
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/9dbda4cd-ac0b-09d6-4abb-c403f18cf11b.png">
以上でWIndows10の設定は完了です。

##クローンを作成
共有リポジトリからクローンを作成します。
作成場所は、C:\Prj\HelloWorldにします。

###TortoiseGitを利用してクローン作製
デスクトップ等適当な場所で右クリックし、表示されたメニューから[Gitクローン (複製)...]を選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/43ae4ab8-31f7-8e0d-a78a-ed597c1ac6b0.png">

下記の設定画面が開きます
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/4f5f3a1c-504a-7a89-91c5-cc2b2a8e06da.png">
URLには以下の値を設定します。
"ssh://" + ユーザー名 + "@" + さくらVPSサーバーのアドレス + ":" + SSHポート番号 + "共有リポジトリディレクトリ"

ディレクトリは、クローンを作成するフォルダ名を設定します。
ここでは、「C:\Prj\HelloWorld」にしました。
フォルダは無ければ作成されます。

Putty鍵のロードにチェックを入れ、[...]をクリックし、秘密鍵を選択します。
ここで選択する秘密鍵は、「 [7.sftp接続](https://qiita.com/Qsugi/items/a8328a116218b058a8bf)」の設定時に作成した秘密鍵ファイルです。

[OK]をクリックすると、秘密鍵のパスフレーズを聞いてきますので、「 [7.sftp接続](https://qiita.com/Qsugi/items/a8328a116218b058a8bf)」で設定したパスフレーズを入力し[OK]をクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/4f53734f-8fef-55bd-4e31-9a13a5b82775.png">

クローン作製中
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/282e963b-d24a-bd43-8c0a-50f191eb1197.png">

無事終了しました
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/73288e2a-d10c-a0c1-1cb3-291ce5dabdde.png">

フォルダ確認
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/37911265-05a0-7dda-cbc9-443aeae5c909.png">

##動作確認
###サーバーを起動してみる
コマンドプロンプトを起動し、ディレクトリの移動。

```
> cd \Prj\HelloWorld
```

とりあえずサーバーを立ち上げてみたら、railsコマンドがみつからないので、「bundle install」しろと出ました。

```
>bundle exec rails s
bundler: command not found: rails
Install missing gem executables with `bundle install`
```

「bundle install」を実行すると、派手にエラーが出ました(T0T)

```
>bundle install
Fetching gem metadata from https://rubygems.org/.
Retrying fetcher due to error (2/4): Bundler::PermissionError There was an error while trying to read from `C:/Users/sugi/.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/info/mini_portile2`. It is likely that you need to grant read permissions for that path.
.
Retrying fetcher due to error (3/4): Bundler::PermissionError There was an error while trying to read from `C:/Users/sugi/.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/info/thread_safe`. It is likely that you need to grant read permissions for that path.
.
Retrying fetcher due to error (4/4): Bundler::PermissionError There was an error while trying to read from `C:/Users/sugi/.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/info/websocket-driver`. It is likely that you need to grant read permissions for that path.
.
There was an error while trying to read from
`C:/Users/sugi/.bundle/cache/compact_index/rubygems.org.443.29b0360b937aa4d161703e6160654e47/info/globalid`.
It is likely that you need to grant read permissions for that path.
```

どうもファイルの読み取り権限に問題があるようです。
調べてもよくわからなかったので、ちと乱暴ですが管理者としてコマンドプロンプトを実行してみました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/e2d93e8a-2c2c-f70f-3f8e-409ed5c5fea9.png">

再度「bundle install」したら、無事動きました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/4ce07783-908d-6cbd-49a9-eb6b3d26aa9c.png">

サーバー起動に再チャレンジ。

```
>bundle exec rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.4 application starting in development
=> Run `rails server -h` for more startup options
  Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
  Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
*** SIGUSR2 not implemented, signal based restart unavailable!
*** SIGUSR1 not implemented, signal based restart unavailable!
*** SIGHUP not implemented, signal based logs reopening unavailable!
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

ブラウザで確認。
動いているようです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/03bc7ecb-b97d-3a67-6827-79cc18c88f02.png" width="600px">

###コントローラーを作成しプッシュしてみる

コントローラーを追加作成し、追加・変更した内容を共有リポジトリにプッシュしてみます。

####コントローラを作成

```
>bundle exec rails generate controller hello
  Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
  Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
      create  app/controllers/hello_controller.rb
      invoke  erb
      create    app/views/hello
      invoke  test_unit
      create    test/controllers/hello_controller_test.rb
      invoke  helper
      create    app/helpers/hello_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/hello.coffee
      invoke    scss
      create      app/assets/stylesheets/hello.scss
```

app/controllers/hello_controller.rbにアクションメソッドindexを追加

```
class HelloController < ApplicationController
  def index
    render plain: 'こんにちは、世界！'
  end
end
```

config/routes.rbにルーティング設定

```
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  get 'hello/index', to: 'hello#index'
end
```

ローカルサーバーを起動し動作確認

```
> bundle exec rails s
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/9ef5a060-5e24-58d3-3c8b-947677d2be23.png" width="600px">

####プッシュ

変更したファイルをさくらVPSサーバの共有リポジトリにプッシュします。
その前に、開発用ローカルマシンのローカルリポジトリに変更をコミットします。

HelloWorldフォルダの上で右クリックし、表示されたメニューより[Gitコミット(C)->"master"...]を選択。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/ba4a57c9-c1df-2854-4a12-ebc6a4bc383c.png">

下記のようにコミット画面が表示されますので、「メッセージ」を入力し、追加ファイルにチェックを入れ[コミット]ボタンをクリックします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/d9db245c-5669-00e5-2af5-0a0459ac28ef.png">

下記画面のようにコミットが実行され、成功と表示されるとコミットは成功です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/aeb0e2b1-2ec9-1342-4b1d-b20cba8ac23e.png">
コミットが成功したら、さくらVPSサーバの共有リポジトリへプッシュします。
上記画面の[プッシュ]ボタンをクリックすると下記のプッシュ画面が開きます。
[OK]をクリックし、サーバーの共有リポジトリにプッシュします。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/4e8e0212-7f9b-a554-053c-b42d52bd68f5.png">

プッシュが実行されます。
無事成功しました。
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/5b2c97e7-af56-cc46-f917-860857f80106.png">

###さくらVPSサーバーでの動作確認

####Git確認
共有リポジトリへのプッシュを確認するために、ログを見てみます。

```
$ cd /opt/helloworld.git
$ git log
commit 941e28b8e44d6dfcbe2ba2bdf5189cba76b92b38
Author: Kouichi Sugimoto <sugi@kougeisya.com>
Date:   Tue Dec 3 18:06:20 2019 +0900

    Windowsからのプッシュテスト

commit d3f7327c74c7175b75ca7d78f4a1cd576f5b6d9a
Author: sugi <sugi@kougeisya.com>
Date:   Mon Dec 2 15:49:37 2019 +0900

    Initialize repository
```

開発用ローカルマシンのリポジトリから、さくらVPSサーバの共有リポジトリへのプッシュはうまくいっているようです。

開発リポジトリから共有リポジトリにプッシュがあると、自動的に本番サーバーがプルするように設定していました。
これが動いているか、本番ソースのログをチェックしてみます。

```
$ cd /var/www/app/HelloWorld
$ git log
commit 941e28b8e44d6dfcbe2ba2bdf5189cba76b92b38
Author: Kouichi Sugimoto <sugi@kougeisya.com>
Date:   Tue Dec 3 18:06:20 2019 +0900

    Windowsからのプッシュテスト

commit d3f7327c74c7175b75ca7d78f4a1cd576f5b6d9a
Author: sugi <sugi@kougeisya.com>
Date:   Mon Dec 2 15:49:37 2019 +0900

    Initialize repository
```

hello_controller.rbが出来ているかチェック

```
$ cd /var/www/app/HelloWorld/app/controllers
$ ls
application_controller.rb  concerns  hello_controller.rb
```

無事、本番ソースへ反映されていました。

####動作確認
本番ソースのサーバーを起動します。

```
$cd /var/www/app/HelloWorld
$ rails server -b 0.0.0.0
=> Booting Puma
=> Rails 5.2.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.5-p114), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
```

ブラウザで確認
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/e7a5c5a8-e250-35b2-c6d9-9f938959d55e.png">
無事動きました。
これでGitを使った共同開発の環境が出来ました。

##補足
###Windows環境に追加
sqlite3のテーブル作成時にWindows環境に足りないものがありましので、これをインストールします。

####sqlite3のインストール
コマンドプロンプトでsqlite3を実行してみたら、

```
> sqlite3
C:\Prj\railbook>sqlite4
'sqlite3' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```

sqlte3をインストールしていなかったので入れます。
下記サイトから2つのファイルをダウンロードします。
・sqlite-dll-win64-x64-3300100.zip
・sqlite-tools-win32-x86-3300100.zip
https://www.sqlite.org/download.html
<img src="https://qiita-image-store.s3.amazonaws.com/0/222823/eff299d7-4576-b7ed-05c8-653435e2b316.png">

ダウンロードしたファイルを適当な場所で解凍し、出来たファイルの中から「sqlite3.exe」と「sqlite3.dll」をルビーをインストールしたフォルダの中の「bin」フォルダにコピーします。
私の環境では「C:\Ryby26-x64\bin」にコピーしました。

####Gemfileに追加
モデルクラスを作成した時、以下のメッセージが表示されました。

```
> bundle exec rails generate model book isbn:string title:string price:integer publish:strng published:date dl:boolean
Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
Please add the following to your Gemfile to avoid polling for changes:
    gem 'wdm', '>= 0.1.0' if Gem.win_platform?
    invoke active_record
    create   db/migrate/20191205074742_create_books.rb
    create   app/models/book.rb
    invoke   test_unit
    create     test/models/book_test.rb
    create     test/fixtures/books.yml
```

Gemfileに追加しろとのことなので、以下をGemfileファイルの最後に追加しました。
platformsの設定は、Windowsのみに反映する為です。

```
gem 'wdm', '>= 0.1.0', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
```

追加を反映

```
> bundle update
```

一度modelを削除し、再度generateしたところ、エラーメッセージは消えました。

```
> bundle exec rails destory model book
      invoke  active_record
      remove    db/migrate/20191205074742_create_books.rb
      remove    app/models/book.rb
      invoke    test_unit
      remove      test/models/book_test.rb
      remove      test/fixtures/books.yml

> bundle exec rails generate model book isbn:string title:string price:integer publish:strng published:date dl:boolean
    invoke active_record
    create   db/migrate/20191205083936_create_books.rb
    create   app/models/book.rb
    invoke   test_unit
    create     test/models/book_test.rb
    create     test/fixtures/books.yml
```

####マイグレーションファイルによるテーブルの作成

```
> bundle exec rails db:migrate
== 20191205083936 CreateBooks: migrating =======================
-- create_table(:books)
   -> 0.0022s
== 20191205083936 CreateBooks: migrated (0.0040s) ==============
```

sqlite3で確認

```
>sqlite3 db/development.sqlite3
SQLite version 3.30.1 2019-10-10 20:19:45
Enter ".help" for usage hints.
sqlite> .tables
ar_internal_metadata  books                 schema_migrations
sqlite> .exit
```

sqlite3も無事動作していることが確認できました。

#次回

次回は、Pythonのインストールの予定です。

前回：[Ruby On Railsインストール](https://qiita.com/Qsugi/items/c7e69a6761f125846bff)