セキュリティ系の勉強、その他開発メモとか雑談. GithubはUnity触っていた頃ものがメイン Twitterフォローもよろしくです

Rubyの勉強メモ

ruby関係の勉強を始めたので個人的なメモとか残していきます。チュートリアルに関してはこちらのサイトを参考にして進めていきます。

Gem

ライブラリの事。rubyではGemと呼ぶらしい。railsもgem。gemはグローバルに必要なもの以外はそれぞれのプロジェクトにインストールする。(railsもグローバルには入れるべきではないらしい)

bundler

gem管理ライブラリ。gemのバージョン毎の依存関係とかも見てくれるとのこと。bundlerもgem。

gemfile, gemfile.lock

bundlerが利用する設定ファイル。gemfileにはbundlerがインストールするgemとそのバージョン情報を記載する。gemfile.lockはそれに応じて自動生成される。


グローバルにrailsを含まないプロジェクトの作成

参考にさせていただいたのはこのサイト。上で紹介したチュートリアルクラウドIDEを使っていたのですが、ローカル環境でチュートリアルを進めたかったため、サイト外の手法を利用しました。ちなみにrbenvまでのインストールは完了している前提です。

$ rbenv exec gem install bundler #ruby環境にbundlerのみをインストール
$ rbenv rehash      #$ rbenv exec gem listで現在有効なgem一覧を取得可能

$mkdir newproject #新しいプロジェクトを作る場所
$cd newproject

$ cat << EOS > Gemfile   #railsプロジェクトを生成する目的で一時的にrailsを入れる
source "http://rubygems.org"
gem "rails", "5.2.1" #最新バージョンを調べてください 
EOS
$ bundle install --path vendor/bundle  #railsを vender/bundle 以下にインストール
$ bundle exec rails new sampleproject --skip-bundle #sampleprojectは自分のプロジェクト名をつけてあげる



$ rm -f Gemfile   #プロジェクトの生成が終わったので削除する
$ rm -f Gemfile.lock
$ rm -rf .bundle
$ rm -rf vendor/bundle

$ cd sampleproject 
$ bundle install --path vendor/bundle #プロジェクト内にgemを再インストール

プロジェクト生成に使用したgemは消してしまいますが、生成時にGemfile内に必要なgemの情報が書かれるため、それを利用してプロジェクト内にrailsを引っ張ってこれるようです。おそらく。


vendor/bundleディレクトリは、"容量が多い", "Gemfileによりgit clone先で同じ環境が作れる"との理由で、git管理から外してあげるのが良いそうです。

$ echo '/vendor/bundle' >> .gitignore

以下のコマンドを実行して、ブラウザでターミナルに表示された場所にアクセスできれば完了です。(httpです)これ以降、サーバを立ち上げる際はこのコマンドを使用してください。rails serverコマンドは使用できないです。

$ bundle exec rails server

なお、私が試した時railsの最新バージョンは5.2.1だったのに対して、チュートリアルでは5.1.6であった。5.1系から5.2系になる際にbootsnapというgemが追加されたそうです。これはrailsの起動を早くするものらしく、5.2でデフォルト採用されたとのこと。なので、5.2で上のようにプロジェクトを生成して5.1に戻すと、bootsnapがないよ!ってエラーが投げられます。大人しく初めからrails5.1.6を使用してプロジェクトを作り始めるか、ここのサイトを参考にgemに追加して実行すれば動く模様。


config/route.rb

railsのルーティングファイル。rootとつけたコントローラのアクションがindexページを生成する。

GithubとBitbucket

チュートリアルに登場してたのでメモ程度に。Bitbucketの利点は「共同作業者が一定数以下ならリポジトリを公開しなくても無料、共同作業者が一定数を超えると有料」なところ。Bithubは非公開リポジトリを作成するためには有料アカウントが必要なので、セキュリティ面でチュートリアルのプロジェクトでも非公開を推奨するらしい。

Herokuにデプロイ

ブランチ切って作業して、それをマージせずにmasterをherokuにpushしてしまい詰まりました。エラーは以下のようなものでした。

Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 'sqlite3'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord). (Gem::LoadError)

解決法はここのサイトの通り。config/database.ymlのproduction設定がsqlite3のままなので修正するのと、herokuにポスグレを導入してデータベースを作成し直すの2点。

$ heroku addons:create heroku-postgresql:hobby-dev
$ heroku run rake db:migrate

herokuにpushする前にあらかじめconfig/database.ymlを変更しておけば、導入の手順は必要ないです。