railsチュートリアル　一章

１，railsインストール
まず下準備から

.1Rubyドキュメントをインストールしないよう.gemrcファイルを設定する

$ echo "gem: --no-document" >> ~/.gemrc

↑最初に、Rubyドキュメントのインストールで無駄な時間を使わないようにするコマンド設定


.2バージョンを指定してRailsをインストールする
$ gem install rails -v 6.0.3
　
↑-vというオプションを使うことで、インストールされるRailsのバージョンを正確に指定できる


.3avaScriptソフトウェアの依存関係を管理するYarnというプログラム
$ source <(curl -sL https://cdn.learnenough.com/yarn_install)

↑ネイティヴOS環境で開発するなら自分のプラットフォームにあったYarnインストール手順を踏まなくてはいけない



2,最初のアプリの作成

.1rails newを実行する
$$ rails _6.0.3_ new hello_app

↑ターミナル上でこのコマンドを実行するとたくさんのファイル、ディレクトリが自動生成される
![スクリーンショット 2021-02-15 193030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916905/46f7d109-e067-5d5d-d3bb-a646b7d6c40b.png)



3,アプリケーションに必要なgemのインストール

.1 Bundlerをインストールする

先ほどのRailsコマンドによって自動的に実行されているので今回はデフォルトのgemを変更して再度実行

＊注意！！！！！
gemコマンドでバージョン番号を指定しない限りBundlerは自動的に　　　　最新バージョンのジェムをインストールし続ける
＊くわしくはチュートリアル１章1.3.1参照（https://railstutorial.jp/chapters/beginning?version=6.0#cha-beginning）

　
.2　Gemfileの内容を変更し、コマンドラインでbundle installを実行
$ cd hello_app/
$ bundle install

変更後Gemがこちら↓
![スクリーンショット 2021-02-15 195634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916905/99d3e88c-a767-acfa-9657-fe4b0048df8f.png)



4,上記の工程を経て実際に動かすアプリケーションを作成できた。
アプリを動かすには、コマンドラインでrails serverを実行する


.1　システムによってはrails serverコマンド実行する前にローカルwebサーバーへの接続を許可する必要がある
↓
config/environments/development.rbファイルにコマンドを追加する
![スクリーンショット 2021-02-15 230528_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916905/cc0f7cbf-e015-e1b1-3b2d-390659fd7c6e.jpeg)


.2　rails サーバーを実行する

$ cd ~/environment/hello_app/
$ rails server

↑ターミナルタブをもう一つ開いて実行すると最初のタブで引き続きコマンドを実行できる。

rails　serverの結果を表示するには上記画像の一番上previewを押してPreview Running Applicationをクリックするとブラウザのタブで表示してくれる

！！！ここで発生した問題！！！
↓
![スクリーンショット 2021-02-16 070956.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916905/9d9e9db1-7237-f676-c92a-ff403033edf8.png)

？？？
何がいけないんすか？？
blocked hostとなっていたけどconfig/environments/development.rbのでconfig.host.clearを記述してすべてのホストに対してリクエストを許可したはず。

解決策を調べてみたところ同様のエラーで詰まっている人がいた(https://help.qiita.com/ja/articles/qiita-article-guideline)
この人の解決策を参考に試してみた


しかしうまくいかずさらに調べたところgemfileとconfig/environments/development.rbのファイル変更時に上書き保存(ctrl + C)をしていないからではというところに行き着いた。

そしたら↓
![スクリーンショット 2021-02-16 080722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916905/87a0d6fe-789f-9927-9f17-2caf2fdea7a3.png)

無事成功。
ここで学んだのはファイルの中身を変更したらすぐ上書き保存するということ。




演習
１，答え
<font color="red">ubuntu:~/environment/hello_app (master) $ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
</font>ubuntu:~/environment/hello_app (master) $ 


2,
![スクリーンショット 2021-02-16 081555.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916905/0134b5b0-7f39-ad87-eb83-869b533f864a.png)
一致している


5,railsはMVC(models,view,controllers)というアーキテクチャで構成されている
>railsチュートリアル引用
ブラウザがRailsアプリと通信する際、
1.一般的にWebサーバーにリクエスト（request）を送信し、
これはリクエストを処理する役割を担っているRailsのコントローラ（controller）に渡されます。
2.コントローラは、場合によってはすぐにビュー（view）を生成して3.HTMLをブラウザに送り返します。
動的なサイトでは、一般にコントローラは（ユーザーなどの）サイトの要素を表しており、データベースとの通信を担当しているRubyのオブジェクトであるモデル（model） と対話します。モデルを呼び出した後、コントローラは、ビューを描画し、完成したWebページをHTMLとしてブラウザに返します。

###現在あるコントローラを確認
```ruby
$ ls app/controllers/*_controller.rb
```

###ルーティングを変更
```ruby:config/routes.rb
root 'controller_name#action_name'
#今回はこうなる
root 'application#hello'
```


###演習
1,

```ruby:/hello_app/app/controllers/application_controller.rb
def hello
    render html: "hola.mundo!"
  end
```

2,

```ruby:/hello_app/app/controllers/application_controller.rb
def hello
    render html: "¡hola.mundo!"
  end
```

3,

```ruby:/hello_app/app/controllers/application_controller.rb
def goodbye
    render html:"goodbye,world"
  end
```
```ruby:/hello_app/config/routes.rb
#helloをgoodbyeに書き換えた
 root 'application#goodbye'
```


##gitのセットアップ
>$ git config --global user.name "自分の名前"
>$ git config --global user.email your.email@example.com



###クラウドIDEでデフォルトのエディタを設定する
>$ sudo ln -sf `which nano` /usr/bin


###check outコマンドを短く入力できるコマンド
>git config --global alias.co checkout

###gitのパスワードを一定時間保持する
>git config --global credential.helper "cache --timeout=86400"


###リポジトリセットアップ
>$ cd ~/environment/hello_app    # Just in case you weren't already there
$ git init　*init・・・初期化


###プロジェクトのファイルをリポジトリに追加
>待機用リポジトリ(ステージングエリア）に追加
git add -A
ステージングエリアからリポジトリに反映(コミット）
>git commit -m "Initialize repository"


##問題発生
gitにaddできない

→実際はできていた


github に反映されない

```git
ubuntu:~/environment/hello_app (master) $ https://github.com/dlr0w/hello_app.git
bash: https://github.com/dlr0w/hello_app.git: No such file or directory
ubuntu:~/environment/hello_app (master) $ git push -u origin master
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

またもやわからん。

読んでみると
>originはgitのリポジトリではない、
リモートリポジトリを読み取ることができない
正しいアクセス権があることを確認してください
リポジトリが存在します。

とある。


###解決策
git remote rm origin でオリジンを削除した。
そして
git remote add origin https://github.com/dlr0w/hello_app.git
でまた追加した

理由はわからにけどこれで無事に成功した。



##ブランチでミスしたとき

>これはあくまで例です。ブランチでミスをした時以外は実行しないでください。
```
$ git checkout -b topic-branch
$ <ココで何か変更を加えてみてください>
$ git add -A
$ git commit -a -m "Make major mistake"
$ git checkout master
$ git branch -D topic-branch
```

本番用環境でPostgreSQLを扱うため本番環境にpg gemをインストールしてPostgreSQLと通信できるようにする

```ruby

group :production do
  gem 'pg', '1.1.4'
end
```

##本番用以外のgemをインストールする
```ruby

$ bundle install --without production
```
↑ではローカルの環境にはインストールしないようにするために、bundle installに特殊なフラグ「--without production」を追加してある

##Herokuをインストール
```
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
```

##Herokeコマンドでログイン
```
#--interactiveオプションを使うと、herokuコマンドでブラウザを開かないようにできる
$ heroku login --interactive
```


##演習
１，本番アプリでも
変更したプログラムのコミットが必要
 git commit -a -m "Update Gemfile for Heroku"
↑のような

git commitしてからgit push herokuしないといけない

2、も上記と同じ風にできる



=========================================================
メモ
#####gitコマンド
参照
>https://qiita.com/konweb/items/621722f67fdd8f86a017