- 投稿日:2021-10-25T23:34:19+09:00
Railsの環境構築やデプロイを学ぶ上で役に立った記事
普段はインフラ寄りの仕事をしているエンジニアですが、Railsの環境構築やデプロイについてキャッチアップする機会があり、色々学ぶうちにブックマークが溜まってきました。 同様の内容を学習中の方の参考になればと思い、Qiita記事化します。 環境構築関連 Docker Rails 6.1のDocker開発環境構築をEvil Martians流にやってみた(更新)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社 クジラに乗ったRuby: Evil Martians流Docker+Ruby/Rails開発環境構築(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社 Nginx+Rails6.0+MySQL8.0+Adminer:docker-compose で rails new Ruby on Railsの開発環境をDockerで構築する方法(Rails 6.x) nginx + Rails (unicorn) + MySQL 環境を Docker で構築する - Qiita Docker イメージサイズを抑えながら Ruby on Rails + PostgreSQL の開発環境を作成する - bitA Tech Blog docker-compose+Nginx+Rails6 で静的コンテンツをNginxから配信する https://github.com/ledermann/docker-rails nginxとPumaを連携し、nginx + Puma + Rails6の開発環境を構築する手順 | Enjoy IT Life 【決定版】rbenv を使った ruby のインストール AWS EC2等 Ruby on Rails 6をAmazon Linux 2で動かす - サーバーワークスエンジニアブログ Amazon Linuxでrbenvをインストール - Qiita CentOS8上にnginxとpumaとRailsを手作業で構築した後に手動でデプロイする - もちゅろぐ 【Rails】Nginx, Puma な環境によるデプロイ&サーバーの勉強【AWS EC2】 - Qiita AWS Rails 6 + MySQL + Nginx な環境の作成方法 サーバー編 - たけログ EC2にRails環境構築(Ruby 2.6、Rails 6.0) - 欲望のおもむくままに RailsアプリをAWSにイチからデプロイするまでの手順メモ · Code of Duty CI関連 https://github.com/CircleCI-Public/circleci-demo-ruby-rails 自動デプロイ(CD)関連 ECS Amazon ECSで動かすRailsアプリのDockerfileとGitHub Actionsのビルド設定 - メドピア開発者ブログ Capistrano Capistrano公式ドキュメント CircleCI + Capistrano + AWS(EC2) + Railsで自動デプロイしてみた - Qiita はじめてのCapistrano - Qiita Capistranoでデプロイ自動化 - kumilog.net CapistranoでRailsデプロイ - kumilog.net https://github.com/capistrano/rails https://github.com/capistrano/rbenv multistage 環境で capistrano-rbenv を使うときは rbenv_path の扱いに注意! - Hack like a rolling stone capistrano3でpumaの運用ー設定ファイルの管理どうする? - Qiita Rails5+Puma+Nginxな環境をCapistrano3でEC2にデプロイする(後編) - Qiita ざくにく定食: capistranoでbundle installするまで AWS CodeStar CodeStarではじめるRailsアプリのCodeDeploy化 puma Pumaの使い方 まとめ - 猫Rails Puma の Daemonization が廃止された理由と、デーモン化したいときはどうするべきか - 完全に理解した.com Pumaの起動におけるpumaコマンドとpumactlコマンドの違い - Qiita ポートを指定してPumaを起動するとsocketファイルをlistenしなくなる - Qiita nginx commented nginx.conf for Ruby on Rails bundle config bundle config | Bundler日本語ドキュメント | Ruby STUDIO ログローテート 【Ruby on Rails】ログ出力とログローテートの設定まとめ【Logger】 - きゃまなかのブログ 【Rails】Railsアプリのログローテーション設定を行う - AUTOVICE devise Devise入門 64のレシピ - 猫Rails その他 不正な config/master.key が原因でRailsの起動に失敗するケースとその対処方法 - Qiita
- 投稿日:2021-10-25T23:17:38+09:00
Railsアプリの雛形作成!
①.railsコマンド Webアプリケーションを作成するために、これからターミナルに様々なコマンドを打っていくことになります! Railsに関する動作を行うには、ターミナルにてrailsコマンドを使用します! Railsに関する命令は、すべてrailsというコマンドから始まります! rails コマンド名とすることで、さまざまな動作を実行できます! 下記は例となります! # railsに続けて、コマンドを記述する % rails コマンド名 新しいアプリケーションを作成するには、ターミナルでrails newというコマンドを実行します! ②.rails newコマンド Railsで新規アプリケーションを作成する際に使用します! このコマンドを実行することで、Railsアプリケーションの雛形が作成されます! コマンドを実行する際には作成したいアプリケーション名を最後につけてrails new アプリケーション名とコマンドを実行します! 下記は新規Railsアプリケーションの作成の例です! # Railsアプリケーションを作成 % rails new アプリケーション名 rails newコマンドで雛形を作成するときには、以下の2つの指定を行います! ・使用するRailsのバージョンの指定 ・オプションの指定 ①使用するRailsのバージョンの指定! newの前に、使用したいRailsのバージョンを指定することができます! # Railsのバージョンを指定してアプリケーションを作成(6.0.0の場合) % rails _6.0.0_ new アプリケーション名 今回は例では、バージョン6.0.0を使用します! バージョンが変わるとプログラムの書き方が変わることがあるため、必ず6.0.0でアプリケーションを作成してください! *バージョンを指定しない場合は、PCにインストールされている最新のRailsのバージョンが使われます! ②オプションの指定 ハイフン-を使い-オプション名と追記することでオプションをつけることができます! # オプションを付けてアプリケーションを作成 % rails _6.0.0_ new アプリケーション名 -オプション名 オプションとは、コマンド実行時に後ろに続けて入力することで、コマンドの動作を変更したり追加することができるものです! 各コマンドごとにさまざまなオプションが用意されています! ③. -dオプション -dオプションは、rails newコマンドにつけることができるオプションです! -dオプションをつけると、作成するアプリが利用するデータベースの管理システムの種類を指定できます! 例 % rails new アプリケーション名 -d データベース管理システム名 今回の例では、「mysql」というデータベース管理システムを利用します! # データベース管理システムにmysqlを指定 % rails new アプリケーション名 -d mysql 例えば、test_appと言うアプリを作成する際は、以下のようになります! # Railsのバージョン6.0.0を用いて、TestAppを作成 % rails _6.0.0_ new test_app -d mysql これでアプリの雛形は作成できます! ④.データベースを作成 Railsアプリケーションの雛形が作成できました! Webアプリケーションは、様々なデータを保存したり表示したりします! しかし、いま作った雛形には、まだデータベースがないのでデータが蓄積できません! データの保存に必要なデータベースも作成します! ⑤.rails db:createコマンド 新しくデータベースを作成するにはrails db:createというコマンドを実行します! # データベースを作成する % rails db:create *作成とは反対に、データベースを削除する場合はrails db:dropコマンドを使用します! Railsでは、データを元に動作や表示を変更します! rails db:createコマンドを使ってデータベースを作成しましょう! rails db:createコマンドを実行すると、以下の2つのメッセージがターミナルに表示されます! (例)ターミナル Created database 'test_app_development' Created database 'test_app_test' つまり、2つのデータベースが作成されたということです! これらは、自分のPCで開発を進めるために必要なデータベースとなります! ⑧.まとめ 簡単に言うと以下のようなります! railsコマンドとは、Railsに命令するためのコマンドのこと! rails newコマンドとは、Railsの新規アプリケーションを作成する際に使用するコマンドのこと! rails db:createコマンドとは、新しくデータベースを作成するコマンドのこと! こんな感じにまとまります! 基礎というか初めの段階なので、きっちり覚えておこうと思います! 何か説明で間違っていたらご指導お願い致します(_ _)
- 投稿日:2021-10-25T22:49:04+09:00
Ruby gemのコードを読んでみよう。(初期設定編)
概要 ruby gemのコードの中身をデバッグしながら読む方法についてまとめます。 本記事では、binding.pryを埋め込んで任意の場所をデバッグできるところまでの設定部分をまとめます。settingslogicというGemが、ソースの中身も短くリーディング初心者にとっても優しそうだったのでサンプルとして選択しました。 環境 mac 11.2.3 ruby 2.7.2 bundler 2.1.4 手順 1.リーディング用のディレクトリを作成します。 mkdir gemcode_reading 2.ディレクトリ直下で、bundle initして、Gemfileを作成する。 bundle init # gemcode_reading # - Gemfile 3.デバッグ用のGemであるpryと、コードリーディングを行いたいGem(今回はsettingslogic)をGemfileに追加。 # frozen_string_literal: true source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } gem "pry" gem "settingslogic" 4.bundle installで必要なGemをインストール bundle install 5.Gemを使用するためのスクリプトを準備。 #settings.rb #対象のgemを読み込み require "settingslogic" #デバッグ用のpryを読み込み require "pry" # ソースと名前を指定すれば、設定yamlから任意の値を取得できるClassを作成。 # 取得部分のロジックを、今回ソースをデバッグするsettingslogicが担っています。 class Settings < Settingslogic source "config/application.yml" namespace "development" end p Settings.cool #{"saweet"=>"nested settings"} p Settings.neat_setting #800 #config/application.yml Custom: &defaults cool: saweet: nested settings neat_setting: 24 development: <<: *defaults neat_setting: 800 test: <<: *defaults production: <<: *defaults 6.Gemの内部の任意の箇所にbinding.pryを設置 #vendor/bundle/ruby/2.7.0/gems/settingslogic-2.0.9/lib/settingslogic.rb class Settingslogic < Hash def initialize(hash_or_file = self.class.source, section = nil) #デバッグ binding.pry case hash_or_file when nil raise Errno::ENOENT, "No file specified as Settingslogic source" when Hash self.replace hash_or_file else file_contents = open(hash_or_file).read hash = file_contents.empty? ? {} : YAML.load(ERB.new(file_contents).result).to_hash if self.class.namespace hash = hash[self.class.namespace] or return missing_key("Missing setting '#{self.class.namespace}' in #{hash_or_file}") end self.replace hash end @section = section || self.class.source # so end of error says "in application.yml" create_accessors! end end 7.スクリプトを実行 bundle exec ruby settings.rb 8.デバッグ箇所の表示 95: def initialize(hash_or_file = self.class.source, section = nil) => 96: binding.pry 97: case hash_or_file 98: when nil 99: raise Errno::ENOENT, "No file specified as Settingslogic source" 100: when Hash 101: self.replace hash_or_file 102: else 103: file_contents = open(hash_or_file).read 104: hash = file_contents.empty? ? {} : YAML.load(ERB.new(file_contents).result).to_hash 105: if self.class.namespace 106: hash = hash[self.class.namespace] or return missing_key("Missing setting '#{self.class.namespace}' in #{hash_or_file}") 107: end 108: self.replace hash 109: end 110: @section = section || self.class.source # so end of error says "in application.yml" 111: create_accessors! 112: end まとめ デバッグ用に埋め込んだpryを起点にスクリプトを書き換えたりしながら、ソースの中身を探って行けます。今回は小規模なGemでしたが、ライブラリのコードの中身をしっかり把握するためにコードの重要な箇所は素早く正確に読めるようになりたいです。 参考 RubyGemコードリーディングのすすめ ソースコード・リーディングしよう!
- 投稿日:2021-10-25T21:49:34+09:00
Rubyのヒアドキュメント (行指向文字列リテラル)について
概要 Rubyのヒアドキュメント(行指向文字列リテラル)について簡潔に要点をまとめます。 複数行に渡る長い文字列をスッキリ書けます。 識別子の種類 <<識別子 word = <<TEXT 長い長い文字列をヒアドキュメントで簡潔に書こう。 長いSQLを叩く時も、ヒアドキュメントを利用すれば上手く書けます。 TEXT #"長い長い文字列をヒアドキュメントで簡潔に書こう。\n長いSQLを叩く時も、ヒアドキュメントを利用すれば上手く書けます。\n" #識別子は、自由につける事が出来ます。 word = <<LIGHTTEXT 長い長い文字列をヒアドキュメントで簡潔に書けるよ。 長いSQLを叩く時も、ヒアドキュメントを利用すれば上手く書けるよ。 LIGHTTEXT #"長い長い文字列をヒアドキュメントで簡潔に書けるよ。\n長いSQLを叩く時も、ヒアドキュメントを利用すれば上手く書けるよ。\n" << -識別子 << -をつけると、終端のEOS(SOUND)をインデントさせる事が出来ます。 class Animal def roar <<-SOUND grrr baww SOUND end #" grrr\n boww\n" << ~識別子 ~(チルダ)を識別子の手前に置くと、内部の文字列をインデントさせても、先頭の空白部分が無視されます。 class Animal def roar <<~SOUND grrr baww SOUND end #"grrr\nboww\n" 式としての識別子 メソッド引数としてもヒアドキュメントを使用出来ます。 (引数呼び出し時に、()で冒頭識別子を閉じる必要があるので、その点に注意が必要です。) lang = "Japanese" lang.prepend(<<TEXT) English Chinese TEXT #" English\n Chinese\nJapanese" 引数として渡す場合でも、上記の~や-を使用しインデント付与や先頭の空白文字除去が可能です。 lang.prepend(<<~TEXT) English Chinese TEXT #"English\nChinese\nJapanese" lang.prepend(<<-TEXT) English Chinese TEXT #" English\n Chinese\nEnglish\nChinese\nJapanese" SQLのクエリを引数として渡す際にも、ヒアドキュメントが使えます。 Post.find_by_sql(<<~QUERY) SELECT p.title, b.author FROM posts p, books b WHERE p.id = b.post_id QUERY 複数の引数の一部にのみ、ヒアドキュメントを使用する事も出来ます。 class Vihicle def run(city: "tokyo road", time: "12:00", speed: nil) p "run on #{city} at #{time} by #{speed}" end end car = Vihicle.new() car.run(time:<<~TIME, speed: "100km") 24:00 TIME #"run on tokyo road at 24:00\n by 100km" ワンラインで複数のヒアドキュメントの一括指定も可能です。 #Ruby 2.7.0 リファレンスマニュアルより引用 print <<FIRST_DOC, <<SECOND_DOC これは一つめのヒアドキュメントです。 まだ一つめです。 FIRST_DOC この行からは二つめのヒアドキュメントです。 この行で終わります。 SECOND_DOC メソッド呼び出し word = <<TEXT.upcase Chao, Goodbye TEXT #"CHAO,\nGOODBYE\n" 参考 リテラル (Ruby 2.7.0 リファレンスマニュアル) Rubyのヒアドキュメントの書き方いろいろ プロを目指す人のためのRuby入門
- 投稿日:2021-10-25T20:36:01+09:00
【Ruby】present?はblank?の真逆のメソッド
present? !blank? を実行するメソッド nil, "", " "(半角スペースのみ), [](空の配列), {}(空のハッシュ) のときにfalseを返す blank? nil? + empty? のようなメソッド nil, false, "", " "(半角スペースのみ), [](空の配列), {}(空のハッシュ) のときにtrueを返す 参考
- 投稿日:2021-10-25T20:24:31+09:00
incompatible library version - msgpack.bundle (LoadError) 解決法
はじめに require': incompatible library version - /Users/[name]/rails/rails-tutorial/sample_app/vendor/bundle/ruby/3.0.0/gems/msgpack-1.4.2/lib/msgpack/msgpack.bundle (LoadError) railsチュートリアルをローカル環境で進めているときにこのエラーに出くわしました。 static-pagesコントローラを生成してから何故かrailsコマンドが使えなくなり、身動きが取れなくなりました。 私の環境にピッタリの記事が中々見つからなかったので書くことにしました。 筆者の環境 Macbook Air(M1, 2020) macOS Big Aur バージョン11.4 ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [arm64-darwin20] Rails 6.1.4.1 Bundler version 2.2.29 解決策 rubyのバージョンを2.7.3にしたら動きました。 参考にした記事はこちら https://stackoom.com/question/4YA1j 試したこと ・railsのバージョンを下げてみる ・rubyのバージョンを3.0.2 -> 3.0.1にしてみる ・gemを一回消してからまたインストールする .msgpackをインストールする ・springを再起動させる ・bundlerのバージョンを下げてみる などなど 調べて出てきたことを割と片っ端からしました。 感じたこと 検索をかけて調べているうちに、こちらのエラー文はM1mac(arm64)の環境に多いもののように感じました。 Rosettaを使用していればでない、Rosettaに変えたら解決されるエラーのようです。 私と同じような環境の方は試してみてください。
- 投稿日:2021-10-25T17:05:57+09:00
Rails はじめました [1. 環境構築]
要件 ruby 2.7.4 Rails 6.1.4 redis latest PostgreSQL 12.2 nginx 1.20 開発環境 macOS Big Sur VSCode Docker Desktop VSCode プラグイン Ruby Rails Ruby on Rails Rails DB Schema Docker 環境 以下リポジトリに完成した docker-compose.yml 等を格納 soso555BoBs/env-rails コンテナの構成 app rails 6.1.4 が稼働する ポート番号 3000 で listen web nginx 1.20 が稼働する ポート番号 80 で listen 受け取ったリクエストを app コンテナに渡す pgsql PostgreSQL 12.2 が稼働する ポート番号 5432 で listen rredis redis が稼働する ポート番号 6379 で listen rmail mailhog が稼働する ポート番号 1025 でメールを listen ポート番号 8025 で HTTP リクエストを listen 使い方 前提として、make コマンドを実行できるようにしておくこと 不可能な場合は、Makefile 内の各コマンドをコピペして実行すれば OK 初回 (Rails プロジェクトを作成する) $ git clone git@github.com:soso555BoBs/env-rails.git $ cd env-rails $ make create-project # Install Rails project 上記実行後 http://localhost:3000/ で動作確認 以下の手順を全て行うので時間がかかります rails インストール build docker image docker container up bundle install webpacker install rake db:create container restart 初回 (既存プロジェクトをインポートする) $ git clone git@github.com:soso555BoBs/env-rails.git $ cd env-rails $ git clone git@github.com:hogehoge/rails.git ./backend # Clone any project to the backend directory $ make init $ make up 2 回目以降 $ make up コンテナ終了 $ make down 詰まった点 bundle install した gem がコンテナを立ち上げる度に無くなる gem がインストールされたディレクトリを永続化していないため 永続化するために docker-compose.yml に以下記述を追加 volumes: bundle-store: : : services: app: volumes: - type: volume source: bundle-store target: /usr/local/bundle nocopy: true nocopy: true のせいで、永続化しても更新されないため nocopy: true を削除 docker-compose run と build と up のタイミングに依り volume の内容に不整合が発生。以下記事により解決しました。 rails server 実行時に Webpacker configuration file not found エラーが発生する bundle install の後に webpacker install を実行することで対応 所感 実は「コンテナの構成」には嘘が書かれている。実装できていないので追々実装する。 volume の永続化の解決にものすごく苦労した。 きちんとオプションや記述形式を把握しない限りはコピペなんてするもんじゃない。 おかげで volume 周りの挙動について勉強になった ひとまずこの環境を用いて転職活動アプリを作っていこうと思います。
- 投稿日:2021-10-25T10:07:23+09:00
【Ruby on Rails】初学者専用 デバック練習
Ruby on Railsの勉強を始めて3か月ほどがたちました。 自分でアプリケーションをつくっていくなかでたくさんエラーに悩まされました。 そのため、railsを始める人に知ってほしいエラー処理を作りました。 是非使ってみてください!! コードはこちら↓ https://github.com/koya1616/debug1.git それでは手順を説明していきます。 リポジトリをクローンしてみよう クローンについての記事はこちらもみるといいかもしれないです! ・Git clone から pushまで それではクローンしていきましょう terminal $ git clone https://github.com/koya1616/debug1.git $ cd debug1 簡単ですね。 dockerをつかってみよう dockerは環境構築に使います。ぜひ使ってみてください。 ・dockerの使い方などなど コマンドを打っていきます teminal $ docker-compose build $ docker-compose up -d 環境構築はもう完了してしまいました! GitHubの使い方とdockerを使っている方は楽勝ですね笑 デバックをしてみよう まずはブラウザにアクセスしましょう! http://localhost:3000/ さっそくエラー画面が表示されます!! エラー文を解析してデバックしてください!! もしわからなければこちらのファイルをさんこうにしてください! https://github.com/koya1616/debug1/blob/main/tips 答えは debug1/answers にかいてあります。 https://github.com/koya1616/debug1/blob/main/answers どうでしたか?? ここでは基本的なエラーを発生させました。 大事なことは調べる力や考える力だとおもいます。 Ruby on Rails のデバック練習でした。
- 投稿日:2021-10-25T10:07:23+09:00
【Ruby on Rails】初学者専用 デバッグ練習
Ruby on Railsの勉強を始めて3か月ほどがたちました。 自分でアプリケーションをつくっていくなかでたくさんエラーに悩まされました。 そのため、railsを始める人に知ってほしいエラー処理を作りました。 是非使ってみてください!! コードはこちら↓ https://github.com/koya1616/debug1.git それでは手順を説明していきます。 リポジトリをクローンしてみよう クローンについての記事はこちらもみるといいかもしれないです! ・Git clone から pushまで それではクローンしていきましょう terminal $ git clone https://github.com/koya1616/debug1.git $ cd debug1 簡単ですね。 dockerをつかってみよう dockerは環境構築に使います。ぜひ使ってみてください。 ・dockerの使い方などなど コマンドを打っていきます teminal $ docker-compose build $ docker-compose up -d 環境構築はもう完了してしまいました! GitHubの使い方とdockerを使っている方は楽勝ですね笑 デバッグをしてみよう まずはブラウザにアクセスしましょう! http://localhost:3000/ さっそくエラー画面が表示されます!! エラー文を解析してデバッグしてください!! もしわからなければこちらのファイルをさんこうにしてください! https://github.com/koya1616/debug1/blob/main/tips 答えは debug1/answers にかいてあります。 https://github.com/koya1616/debug1/blob/main/answers どうでしたか?? ここでは基本的なエラーを発生させました。 大事なことは調べる力や考える力だとおもいます。 Ruby on Rails のデバッグ練習でした。
- 投稿日:2021-10-25T07:01:33+09:00
Railsテスト(RSpec)記事12選
RSpecとは? RspecとはRuby用のテストフレームワークです。RSpec は Gem パッケージとして提供されていますのですぐに導入できます。 記事 RSpecについて書かれている記事たちです。参照しやすいように一箇所にまとめました。 おわりに どんどんテストを書いていきましょう!
