2月メモ、編集中


## 2月15日
### *Capistrano*
Ansible, Chef, Dockerとの違いは、、、
Chef: サーバの状態を管理する(ミドルウェアのインストールなど)
Capistrano: アプリケーションコードやDBのテーブル定義

### 構成管理ツール(Ansible, Chef, Puppet)について
*SLI*でも見れる
* 中身を見たかったら、SQLiteのコマンドとかで見れる。
`db:setup`
Structure.sqlも読み込まれる。
* databaseが作られる
* tableを作る
* seedでマスタデータなどを入れる。
migrate周りやDBなどが苦手
とラシューが苦手。

# 2月21日の質問
### やりたいこと
コンフォーム表示の「ok」「キャンセル」でその後の処理を変えたい。
### 現状
コンファーム表示の「キャンセル」を押しても、「ok」を押した時のtrue処理がされちゃう。
### やってみようとしてること
Javascript側でif文を作成して、
「キャンセル」した時の処理として、リンクをクリックしたページ遷移を中止できたらしたいと思っている。

### 上司から
Railsガイドの[Rails をはじめよう - Rails ガイド](https://railsguides.jp/getting_started.html#%E8%A8%98%E4%BA%8B%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B)を送ってもらった。
```
= link_to admin_user_path(user.id), id: 'delete' + user.id.to_s, method: :delete, data: { confirm: "#{user.email}削除してよろしいですか?" }
```
これを見た時に、`link_to`メソッドに第三引数まで入っていて、`link_toのオプション`だと気づかなくちゃ行けない。そこから、`link_toのドキュメント`、`railsガイド`を見て調べようということになる。
### わかったこと
モーダルボックスの表示は、`rails-ujs`というjsファイルで自動生成される。

## 気をつけること
* fill_in ‘user[password]’, with: ‘password’
‘password’ => `users.password` としないのはなぜか。

与えられた情報からちゃんと意味を捉えてない
動かして要件を確認する
githubでも
概要でも
既存のサービスを知らないと要件分からない。
要件分かったら、順番を意識する。
資料をしっかり読んで、要件を定義する。
すり合わせをしっかりする。

<rails_helper.rb>でドライバーの確認した。
```
require 'capybara/poltergeist'
```

Jsオプション有効時のドライバを設定(デフォルトは:selenium)
Capybara.javascript_driver = :selenium


ドライバーはブラウザ動かすためのもので、ブラウザとは若干違う。
Poltergeistを使用するときには、また、GUI(文字やイラストを表示する)じゃない別のテスト用のブラウザを動かしてテストをする。
ドライバーとはその様なもの。

テストの実行手順を確認をする時はputsで確認するといい。
```
describe 'hoge' do
let!(:hoge) { create(:hoge) }
before do
puts '1'
end
context 'hoge' do
it 'fuga' do
puts '2'
end
it 'hoge' do
puts '3'
end
end
end
```
`GNU(グヌー)`…Unixに似たOSをフリーウェアとして、配布するプロジェクトのこと。?

### mysqlが起動しない
`chown `コマンドを使った所有者って何?
```
$ mysql -u root -p
=>-bash: /usr/local/opt/mysql@5.6/bin/mysql: No such file or directory
(上記のコマンドでmysql@5.7を起動したかったのだが、mysql@5.6という記載があった)
$ cd /usr/local/opt/mysql@5.7
mysql@5.7に移動してみる。)
$ ls -lrt
mysql@5.7のファイルの詳細を更新順で一覧表示する)
「-l」...ファイルの詳細を一覧で確認したい場合
「-t」...表示する際の並び順を最終更新時刻順に表示させたい場合。また更に並び順を逆に表示させてたい場合は「-r」を付けます
$ ls -lrt bin/
(bin配下のmysqlを確認する。)
(https://wa3.i-3-i.info/word14485.html)←説明url
(出力)=>
...(省略)
-r-xr-xr-x 1 furuhata CORP\Domain Users 3899644 12 10 12:00 mysql ←ココ
...(省略)
$ ls -lrt bin/mysql
=>-r-xr-xr-x 1 furuhata CORP\Domain Users 3899644 12 10 12:00 bin/mysql
$ bin/mysql -u root
=>Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
bin配下のmysql@5.7で指定して接続しようと試みるもエラー。
$ ps -ef | grep mysql
「ps」...現在実行中のプロセスを表示する。実行結果を見やすくするためにパイプ(|)を使って、「grepコマンド」と併用することが多い
「e」...わかなかった。。。。
「f」...階層表示する。
(出力)=>
1181636884 1424 1 0 木12AM ?? ...(省略)
1181636884 1523 1424 0 木12AM ?? ...(省略)
1181636884 77312 23507 0 11:00AM ttys003 0:00.00 grep mysql
$ kill -9 1424
$ kill -9 1523
上記の出力ででた。2つ目のプロセスまで削除する。
$ ps -ef | grep mysql
=>1181636884 77320 23507 0 11:01AM ttys003 0:00.00 grep mysql
$ bin/mysql.server start
Starting MySQL
. SUCCESS!
$ bin/mysql -u root -p
(接続できた!!!!)
$ which mysql
/usr/local/opt/mysql@5.7/bin/mysql
「which 名前」では、指定した名前で実行されるコマンドの実行ファイルをフルパスで表示します。今回だと「which mysql」では「mysql」コマンドの実行ファイルが表示されます。
```

# vagrant準備
`cask(HomeBrew-Cask)`…HomeBrewの拡張機能のこと

```
<分からない文>
正直、下記の文章では階層の話などどのこの階層にどの様なファイルがあるとか。よく知らないので、意味わからない。

$ brew install hogehoge
とインストールすると、
/usr/local/Cellar/配下に実態がインストールされ、/usr/local/bin/にシンボリックリンクが張られます。
brew cask install hogehoge
とすると、/Applications/配下にインストールされます。
```

`$ brew tap...最近tapで追加したものが表示されます。`
`バイナリ...コンピューターが扱える(2進数で表現される)データのこと`

`$ brew cask list...caskでインストールしたアプリのリストが出力される`

`$ brew search 名...brewでインストール可能なものを出力。名前で絞らない時には、相当な出力がある。Casksとかが出力されたら、「$ brew cask install ###」とかにする`

 

# 2019/2/25

```
/「url: 編集_path」,「method: patch」を入れなくていいのか?↓
/ = form_with model: @task, local: true do |f|
```
多分railsの中身でこの`persisted?メソッド`が動いていて、trueを返す時に`patch`がリクエストに設定されていた。
[form_withがPOSTとPATCHを切り替える条件 - Qiita](https://qiita.com/okonomi/items/6c2b31427161090c173a)


```
$ vagrant plugin install vagrant-vbguest

VirtualBox 用の Box には、以前 Box の作成方法でも書いたように VirtualBox Guest Addition がインストールされています。 [VagrantのBoxを新しく作成する方法(VirtualBox / CentOS 6.6 x86_64)](http://www.task-notes.com/entry/20150611/1433991600) そのため、vagrant-vbguest のプラグインをいれておけば、自分の環境の VirtualBox のバージョンと Box にインストールされている Guest Addition のバージョンが違う場合に、VirtualBox のバージョンに合わせて最新化してくれるというものです。
```
[Vagrantプラグインの使い方(vbguest, hostmanager, sahara, snapshot) - TASK NOTES](https://www.task-notes.com/entry/20150714/1436842800)

 

 


`$ brew search <text>`Homebrew でインストールできる formulae を検索するコマンドです.


<includeの処理をする時>
コントローラーで続けて、`@users = User.where`とかのコードを書いても一行ずつSQL文が発行されない理由。↓いちいちコードを実行するコンソールとは違い、エディタではそのまま出力なしにコードが流れるだけなので、`@users`が出力される時に一度にSQL文が発行される。なので、コンソール画面では出力を常に期待しているので、エディタで常に`puts`しているイメージ。
[image:B7F80F74-B924-42BC-B469-B63399EE0AF2-62076-00018DA38605ABED/スクリーンショット 2019-02-25 21.00.04.png]
[Active Record クエリインターフェイス - Rails ガイド](https://railsguides.jp/active_record_querying.html#%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91%E3%82%92%E4%B8%80%E6%8B%AC%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%99%E3%82%8B)

 

 

# 2019/2/26

* `link_to '削除', @task, method: :delete`
Pathを作る時にlink_toなどのヘルパーでも、完全なurl_for呼び出しの代りに単にオブジェクトを渡すことができる。
[Rails のルーティング - Rails ガイド](https://railsguides.jp/routing.html#%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%8B%E3%82%89%E3%83%91%E3%82%B9%E3%81%A8url%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)

* `$ bundle exec rails db:fixtures:load`、コマンド売ったがデータ読み込まれず

* フロント `colspan`でセル結合する。

 

ーーーーーーーーーーーーーーーーーーリリース、デプロイする時ーーーーーーーーーーーーーーーーーーーー
* sshプロトコルで、プロトコルには手紙のようにフォーマットがある。[SSHサーバーにログインするには? sshコマンド:ネットワーク管理の基本Tips - @IT](https://www.atmarkit.co.jp/ait/articles/1503/23/news004.html)

* pumaっていうアプリケーションサーバ

* カピストラーノ:capistrano
[capistrano使い方まとめ - Qiita](https://qiita.com/okagaway/items/44d6f0fe53884e295633)
[はじめてのCapistrano - Qiita](https://qiita.com/mosson/items/1a4cfd01cb538f2d8f0e)


* パケットキャプチャ
[パケットキャプチャーとは](https://www.infraexpert.com/study/span.htm)

* `ステートフル`と`ステートレス`
[ステートフル(Stateful)とステートレス(Stateless)の違い | SEの道標](https://milestone-of-se.nesuke.com/nw-basic/as-nw-engineer/stateful-and-stateless/)

* sshについて大まかな概要は頭の中に入れておく。(IBMに良い資料あるらしい)
(アプリケーション・サーバー「puma」についても)
[sshコマンド | 日経 xTECH(クロステック)](https://tech.nikkeibp.co.jp/it/article/COLUMN/20070530/273010/)
[Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳) - Qiita](https://qiita.com/jnchito/items/3884f9a2ccc057f8f3a3)
[OpenSSH](https://www.openssh.com/)
ーーーーーーーーーーーーーーーーーーーーーーーーーーココまでーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

# 2019/2/27

* `&.`…レシーバーが nil のとき,NoMethodErrorを投げずにnilを返してくれる機能。

* CarrierWaveの使い方と`file_uploader`の仕様の理解

ファイルが格納されている場所は
`ストアディレクトリ メソッド`の中に定義されていて、

ファイルの保存先はrailsが動いているサーバーかなんかだということは、file-uploader/uploads/~~にファイルが保存されている。

——————————————————————————————————————————————
1, CarrierWaveを使ってファイルを管理している。
2, 保存先は”#{Rails.root}/uploads/~~~”に格納されている。
3, atomの「Show In Up Manager」で確認できた
4, app/model/uploaders/~~ のファイルに設定している。
5, userを削除してもdocumentを削除しても、ファイルは削除されないことがわかった。(ただ、このファイルがどの様に削除されるのかは分からない。)
6, とりあえずこれで仕様はわかったと思う。

[GitHub - carrierwaveuploader/carrierwave: Classier solution for file uploads for Rails, Sinatra and other Ruby web frameworks](https://github.com/carrierwaveuploader/carrierwave)

[画像アップロード CarrierWaveを使ったmodelのRSpecを通す - Qiita](https://qiita.com/motty93/items/5cbc46ce79a502fcaa65)

[Rails5とCarrierWaveを使って画像アップロード機能を作る - write ahead log](https://www.write-ahead-log.net/entry/2018/05/25/231550)

[Rails5.1「carrierwave」で画像をアップロード - 僕とrubyと苦悩](http://jewelrybox.wpblog.jp/2017/09/21/rails5-1%E3%80%8Ccarrierwave%E3%80%8D%E3%81%A7%E7%94%BB%E5%83%8F%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%A8%E8%A1%A8%E7%A4%BA/)

[Rails、carrierwaveの使い方。インストール方法 - Qiita](https://qiita.com/syou007/items/98842179e83c03e5f882)

[RailsのCarrierWaveのカスタマイズ - ファイルの配置先、リサイズ、テストなど - Rails Webook](https://ruby-rails.hatenadiary.com/entry/20141022/1413907332)
——————————————————————————————————————————————

フィンガープリント…データが改ざんされていないかチェックする為のデータ。[フィンガープリント (finger print)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典](https://wa3.i-3-i.info/word16574.html)

* RSA…暗号化の1つの方法。

* `git clone`には`ssh`と`https`2つの取得方法がある。
[GitHubのremote URLにはどのプロトコルを使えばよいのか? - Qiita](https://qiita.com/chroju/items/67da13c672efcd2bc787)

* `bundle`すると`mysql2`で引っかかりエラーが出た。下記で解決
`$ bundle config —local build.mysql2 “—with-ldflags=-L/usr/local/opt/openssl/lib —with-cppflags=-I/usr/local/opt/openssl/include”`
[RailsプロジェクトでMySQLがbundle installできなかった - Qiita](https://qiita.com/akito19/items/e1dc54f907987e688cc0)


* `form_with model: [:admin, @partner_site], local: true do |f|`
これで、ネストされたviewでも`model`だけで行ける。

 

 

* Userのcreateメソッドで
save!でトランザクション処理を入れたほうが良いかどうか?

```


# メール送るのでトランザクションの処理を入れたほうがいいか確認
# @user = User.create!(user_params)
# redirect_to(admin_users_path, notice: "#{@user.email}を作成しました。")

```

 

# 新宿メンタ
## <環境構築について>
```
### リナックス, 環境変数について
- `$ bundle install —path vender/bundle` ←正直この意味も分からない
→上記のコマンドのおかげで、(ただ、bundle install が入る意味不明)
vender/bundle, homebrewは全く別のレイヤーなのでそこは分けたほうがいい。
—path vender/bundleがあるとrailsとかをインストールした時に別々にインストールしてくれる。分けてくれる。下記のように
「$ bundle list | grep rails 」→ rails 5.1
「$ gem list | grep rails 」→ rails 5.2
—path vender/bundleを付けづに`$ gem list`とかやると
rails (5,2, 5.1)」みたいな保存の表示になる。

「vender/bundle/bin/rails」→「bin/rails」を使えるようになる?
- `bin/rails`, `vender/bundle`等のどの様なファイルを入るフォルダなのか?
bin/rails とかはコマンドなので、vender/bundleとは全く別。
bin/railsの正体について、

- リナックスのPATH ←これってミドルウェアの設定をしているのか?
<環境変数>
`$ echo 'export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"' >> ~/.bash_profile`
...PATHを追加するとき、上記のように環境変数を確認する為の`echoコマンド`を入れる理由がわからない。
`echo 変数`のように変数を表示するコマンド。


### ミドルウェア??について
- ミドルウェアとは「webサーバ」「アプリケーションサーバ」「DB管理システム」とかのこと?
視点による。アプリケーションから見たらDBはミドルウェアである。
- ミドルウェアについて、どの様にライブラリが動かされているのか。軽く知りたい。
- homebrewの構造も理解したい。
mysqlで止まってしまったり、virtualboxなどをインストールする時にハマって時間がかかって結局Downloadできなかった。)
vagrant準備していた時、caskとかよく分からなくなった。)
- virtualboxアプリがあるけど、homebrewにインストールすればPCにはインストールしなくても良い。と思っているけどどうなのか?(そもそもhomebrewはpcの代わりにライブラリの整理管理をしてくれて保存もしてくれる、homebrewに保存するので、pc容量も節約できるものだと思っている。あってるか?)


### mysqlの設定について(全体像を理解できていない。。)
- `mysql`のプロセスってなんなのか?(サーバーが起動できない時にその走っているプロセスを削除することで起動できるようになるから。)
- mysqlのspringを切ったり、ps -ef って結局何をしているの?
- Formula `mysql` is not installed. ←このエラーが出て、rails new app -d mysql ができなかった。
```

 

## 聞くこと
```

<やるべきと思っていること>
→ユーザー作成画面で入力したメールアドレスのドメインを抽出し、
Userモデルで名前解決の処理(validation)をして、正しいドメインを持つ@userだけが登録されるようにする。

→登録されているドメインを確認できるようにする。
→目的とするDNSサーバーへアクセスできるようにする。(file_uploaderのurlが必要)
・file_uploaderのurlを指定して、目当てのDNSサーバーを介す。
・上記DNSサーバーで管理している登録ドメインを取得する。

<イメージ>
DNSサーバーで管理されているメールアドレスドメインを配列でいくつか取得して、取得した配列に入力メールアドレスのドメインと一致するドメインがあれば、登録して、なければエラーを出す。という実装をしようと思っている。

<わからなくなってきているところ>
・そもそもfile_uploaderなどのurlを入れて管理しているメールアドレスのドメイン取れるのか?違う気がする。

 


```


## <試してみたこと>
`feature/add-of-mail-transmission-function-to-usersブランチ`で
* レターオープナー見れない。
* confirm_urlで「no method errors」が出る。