はじめに
ローカルワークスペースとgitレポジトリについて
Railsチュートリアルを1章から順にやっていくと、3つのアプリを作成することになります
Railsチュートリアルではherokuを使うので、1gitレポジトリに3つのアプリを突っ込んでしまうとherokuにpushするときに正常にデプロイできなくなってしまいます。
git管理する際は以下のような構成にすることをオススメします
. -- ここでgit initしないこと
└── environment
├── hello_app -- 第1章
│ └──.git/config
├── toy_app -- 第2章
│ └──.git/config
└── sample_app -- 第3章以降
└──.git/config
1.1 はじめに
割愛
1.2 さっそく動かす
ローカル(mac)で普通にチュートリアル通り実行していくと、いきなり以下のエラーが発生します。
printf "install: --no-document \nupdate: --no-document\n" >> ~/.gemrc
gem install rails -v 5.1.6
Fetching: concurrent-ruby-1.1.5.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
ググると、system標準のrubyを使おうとしているため、権限エラーになっているようなので、rbenvをインストールして、別のrubyを使用(バージョンは2.5系で最新だった2.5.7を指定)
brew install rbenv
echo 'export PATH="~/.rbenv/shims:/usr/local/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv install 2.5.7
rbenv global 2.5.7
rbenv versions
gem install rails -v 5.1.6
これでRailsをインストールできます。
もし上手くいかなかったら、ターミナルを再起動してみてください。
1.3 最初のアプリケーション
1.3.1 Bundler
Gemfileとbundlerの使い方についての章
gemはrubyにおけるライブラリのこと。bundlerを使うとgemのバージョンを管理できる。
(pythonでいうところの、requirements.txtがGemfile、pipがbundler)
なお、bundler自身もgemとのこと。
Gemfile.lockというファイルがセットで存在し、.lockの方は実際にインストールしたgemが反映される。
使い方は、
- Gemfileに使用するgemを記載
- bundle installでGemfileに記載されたgemをインストールしてくれる
なお、GemfileとGemfile.lockに同じライブラリが記載されているがバージョンに差異がある場合(Gemfileのバージョンを変えたときなどに発生)には、bundle updateが必要。
bundle installはあくまで、未インストールのgemのインストールしかやってくれず、gemのバージョン更新はしないらしい。
1.3.2 rails server
割愛
1.3.3 Model-View-Controller (MVC)
割愛(大事なところなので、MVCについてよく知らない人はちゃんと読んでください)
1.3.4 Hello, world!
コントローラーに変更を加え、ルーティング(URLと呼び出される処理のマッピング)を変える。
ルーティングはconfig/routes.rbに定義する。
Rails.application.routes.draw do
root 'application#hello'
end
↑デプロイしたURLのルートパスを開くと、application_controller.rbのhelloメソッドが呼び出される
1.4 Gitによるバージョン管理
割愛
1.5 デプロイする
herokuにデプロイしていく。
herokuのCLIが必要になるので、homebrewでインストールする(公式にcatalinaだとwarningが出ると書いてあったが、mojaveだと特に何も起きなかったので気にせず進める)
brew tap heroku/brew && brew install heroku
コマンドラインからログインし、sshキーをherokuに登録し、heroku createで新規アプリケーションを作成する
herokuにgit pushしようとすると以下のエラーが発生。
git push heroku master
fatal: 'heroku' 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.
調べてみると、.gitがネスト(親ディレクトリにも子ディレクトリにも.gitがある)してしまっていた。
どうもheroku createすると、カレントディレクトリでgit initが実行され、.git/configのremoteにherokuが追加されるらしい。
environment
├.git/config
└── hello_app -- 第1章
└──.git/config
↑こういう状態になっていた
environment配下の.gitディレクトリを削除し、プロジェクトルートで再度heroku create実行からやり直すと解消。
無事、herokuにデプロイできた。
1.6 最後に
割愛
第2章に続く