Rails関連のことを調べてみた2022年04月25日

Rails関連のことを調べてみた2022年04月25日
目次

Herokuへのデプロイがfatal: the remote end hung up unexpectedlyで失敗した件

いつも通りRailsアプリをHerokuにデプロイしようとすると、以下のようなエラーが出た。

“`
>> git push heroku master
Enumerating objects: 67, done.
Counting objects: 100% (67/67), done.
Delta compression using up to 16 threads
Compressing objects: 100% (50/50), done.
Writing objects: 100% (54/54), 23.86 MiB | 311.00 KiB/s, done.
Total 54 (delta 17), reused 22 (delta 4), pack-reused 0
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504
send-pack: unexpected disconnect while reading sideband packet
fatal: the remo

元記事を表示

Railsのエラーではまったらやること

### 結論
1. エラー文を読む
2. デバッグツールを使いながらエラー解消を試みる
3. それでも解消できなければ誰かに質問する

です。

### エラー文を読む
エラーにはまっている人はエラー文をしっかり読んでいない印象があります。しっかりエラー文を読みましょう。エラーをきちんと読んでなかった人はこれするだけで大分変わります。また、エラーを直せない原因として単純に知識不足の場合もあるのでその場合は公式ドキュメントを読んで勉強し直しましょう。

### デバッグツールを使いながらエラー解消

putsなどを使ってデバッグしていないでしょうか?デバッグツールを使った方が変数の中身など覗きやすいので利用していきましょう。デバッグツールのイメージがつかない方もいると思うので簡単な使用例を出します。

gem pry-byebugを用いて変数のuserの中身を覗きます。

まず覗きたい変数の近くにbinding.pryを差し込みます。

“`ruby
def show
user = User.find(42)
binding.pry
render json: user,

元記事を表示

まとめてレコードを作成する時はトランザクションを使おう

# トランザクションとは

**トランザクション**とは…コンピュータ システムにおける、永続的なデータに対する不可分な一連の処理

**ロールバック**とは…データ更新などで障害が起こったときに、その前の状態にまで戻ることをいう

# トランザクションの具体例

例えばTwitterでフォローしてる人のツイートを通知ONにしている時、

・ツイートの作成
・通知の作成

の二つはセットで作成されるべきです。ツイートだけ作成に成功する、または通知だけ作成に成功するというのはよろしくないですね。そういう時に、処理をトランザクションとして書くことで一連の処理を確実にすることができるようになります。もし、エラーが発生した場合はロールバックされ元の何も手を加えられていない状態に戻ります。

個人開発やポートフォリオの作成ですとこういった守りの開発(他にもエラーハンドリングとか)が疎かになりがちかと思いますが実務では必須なので日頃の開発から癖づけておくと良いかもです。

Railsですとトランザクションはこんな感じに書けます。

“`ruby
def create
Act

元記事を表示

Railsアプリで時々あるServiceディレクトリの役割

# はじめに
Serviceを今まで、なんとなくで利用してきていたので「Serviceとはなんだ?」というのを調べてみました。

# 事前知識

ファットモデル…ビジネスロジックが大量に書かれているモデル

ビジネスロジック…業務システムの中で、具体的な業務で扱う様々な実体(商品、顧客、在庫など)を表現し、また、それらの関係や処理の方法、業務の流れなどをデータモデルやプログラムコードなどとして実装した部分。

# Serviceとは?

僕はServiceを「ファットモデルになることを回避し、コードを読みやすくするためのコード分割先」という意味だと理解しました。

具体的にServiceに置かれる処理は

・外部サービスを利用する処理
・複数のモデルに渡る複雑な処理

になります。

Serviceを活用することでコントローラーもモデルもすっきりしコードの可読性が上がるというわけです。

# Serviceはどのように書く?

書き方はどうやら多岐にわたるようです。そのため逆にどこにでも共通しているのが書き方の規約をプロジェクトで決めてるということです。

例えば

・クラス

元記事を表示

【rails】chartkick導入ガイド

# はじめに
個人開発の過程でkickchartを利用する機会があったのですが、日本語の記事でわかりやすいものがあまり見つからなかったので公式ドキュメントを日本語化&個人的に役に立った内容を記載しておきます!kickchartを利用する際の参考にしてください!!

# 導入

まずはkickchartの導入からです。rails のバージョンによって導入方法が違うので注意してください!
どのバージョンであってもまずはgemファイルに以下の記述を書き加えてください!!

“`ruby:gemfile.rb
gem “chartkick”
“`

## rails7の場合

configのimport.rbに以下の記述を追加してください。

“`ruby:config/importmap.rb
pin “chartkick”, to: “chartkick.js”
pin “Chart.bundle”, to: “Chart.bundle.js”
“`

また、app/javascript/application.jsに以下の記述を追加してください。
“`ruby:app/j

元記事を表示

【Ruby】あるメソッド内で別のメソッドを呼び出す時に意識すること

こんにちは。
早く駆け出したい @iloveomelette です。

突然ですが、みなさんはあるメソッド内から別のメソッドを呼び出したい時のインスタンスメソッドとクラスメソッドの使い分けはできますでしょうか。
恥ずかしい話ではありますが、私はあやふやでよく`NoMethodError`を出していました。

今回、勉強したことをここにアウトプットしていきますので、
私と同じく使い分けが曖昧な方はサラッとでも良いので、参考にしてくださると幸いです。

尚、ご指摘箇所がございましたら
ご教授いただけますと幸いです。

## 問題

いきなりですが、問題です。
以下の`Actress`クラスにある`yoshioka`メソッドはブロック内にある`arimura`メソッドを呼び出すことはできるでしょうか。

“`ruby
class Actress
def self.yoshioka
arimura
end

def arimura
puts ‘Hello World!!’
end
end

Actress.yoshioka
“`

正解は…

“`zs

元記事を表示

Rails Tutorial の後に何をする?

前置き

※前回の投稿後( Rails Tutorialを終えて)の経過記録になります。

本文

前記事で設定した課題であるDocker, MySQLを利用した環境を構築し、Rails Tutorialを作り直しました。docker関連のコマンドが自然と身につきました。
環境構築のテンプレートとして【Rails6】Docker+Rails6+puma+nginx+mysql【環境構築*初心者必見】の記事を利用しました。
また、開発を進める中でgitコマンドの理解を深められたことで、間違えても修正できるという安心感に結びつきました。

  • 課題(短期)

  • * 完成したRails TutorialのCSSをいじることでCSSの仕様に慣れる。

    元記事を表示

    画面要素出し分けのABテスト時のRSpec(Capybara)の記述

    ABテストで画面要素の出し分け時、画面表示のspecを書く際の記述を思い出すのに時間がかかったのでメモ

    “`show.html.slim
    – case @ab_test_pattern
    – when ‘existing_question’
    – f.select :do_you_like_mushroom_mountain, id: ‘mushroom_mountain’
    – when ‘new_question’
    – f.select :do_you_like_bamboo_grove, id: ‘bamboo_grove’
    “`

    “`show_spec.rb
    # TODO: ABテスト決着後、条件分岐削除
    # ref: https://github.com/xxx/issues/yyy
    it ‘should have correct fields’ do
    if page.all(‘#mushroom_mountain’).empty?
    expect(page).to have_selector ‘select#bamboo_grove’
    e

    元記事を表示

    新規アプリケーション作成からdeviseを導入するまで

    めちゃくちゃ基礎ですけど、今カリキュラム見ながら一個一個やってるので纏めときます。(今後も使うので)

    # ターミナルからrails newでアプリを新規作成
    “`ruby
    % cd ~/projects
    % rails _6.0.0_ new “アプリ名” -d mysql
    % cd “アプリ名”
    “`

    # データベースを作成

    config/database.yml
    “`ruby
    default: &default
    adapter: mysql2
    encoding: utf8 #mb4を消す!
    pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
    username: root
    password:
    socket: /tmp/mysql.sock
    “`

    ターミナル
    “`
    % rails db:create
    “`

    ここで rails sしてサーバー再起動しておく

    ↓以下deviseの導入なり

    Gemfile
    “`ruby
    gem ‘devise’
    “`
    ターミナル
    “`
    % bundle i

    元記事を表示

    minitestでE2Eテストをする

    # はじめに

    rspecの実装例はたくさんあるのですが、minitestがなかったので備忘録。

    # 前提条件

    – rails7でrails newした直後の状態を想定
    – docker-composeを利用
    – capybara + selenium-webdriverの組み合わせ

    # Goal

    – bin/rails test:systemがエラーなく動作する
    – テスト中のブラウザの動きを確認することができる

    # 修正箇所

    ## 1. Gemfileの修正

    下記のように `selenium-webdriver` を追加してbundle installしてください。

    “`ruby:Gemfile
    group :test do
    # Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]
    gem “capybara”
    + gem “selenium-webdriver”
    end
    “`

    ## 2. application_system_test_case.

    元記事を表示

    [Rails] 謎のundefined methodの原因はvalidateの単複ミスだった

    “`ruby
    class User < ApplicationRecord validates :validate_method def self.testmethod(url) User.find_by("url like ?", "%#{URI.parse(url).host}%").present? end private def validate_method 略 end end ``` 定義したはずのtestmethodが呼び出せない。 ``` irb(main):002:0> User.testmethod(‘http://test.com’)
    Traceback (most recent call last):
    2: from (irb):2
    1: from (irb):2:in `rescue in irb_binding’
    NoMethodError (undefined method `testmethod’ for User (call ‘User.connection’

    元記事を表示

    【ポートフォリオ】独学/未経験が10週間でランニング促進Webアプリを作成しました。【Rails / Unicorn / nginx / AWS】

    ## はじめに
    はじめまして、Itoiと申します!
    当記事は独学・実務未経験者が、エンジニアの方からレビューを受けながらポートフォリオ(以下PF)を作った記事になります。
    「未経験から、現役エンジニアのようにPFを作るには」という観点で制作を行いました。

    ##### 自己紹介
    – 31歳、大卒の経理・物品管理事務の国家公務員

    – デジタル・アナログ問わず、技術やモノ作りが大好き
    – 独学で業務の自動化プログラムを3つ(VBA)、プライベートで株価スクレイピングプログラム(Python)、それを元に株選定を行うプログラム(VBA。実際に資産運用中)を作成
    – 「モノを作る仕事をしたい」と思い立ち、転職活動のためのポートフォリオ作成を始める

    今回紹介するPFの作成期間は10週間(2022年2月〜4月中旬)です。

    ### 目次
    1. [作成PF紹介](#作成pf紹介)
    2. [使用技術](#使用技術)
    3. [技術選定理由](#技術選定理由)
    4. [PF作成スケジュール](#pf作成スケジュール)
    5. [振り返り](#振り返り)
    6. [終わりに](#終わりに)

    ## 作成P

    元記事を表示

    AWS/EC2/RDS – MariaDBのインストール手順 with Rails6

    こんにちは。
    早く駆け出したい @iloveomelette です。

    AWSにデプロイを行う際、Rails + MySQLのインストール方法を紹介した記事などはたくさんあるのですが、なぜかMySQLと高い互換性を持つRails + MariaDBのインストール方法はあまり見かけないので、こちらでアウトプットしていきます。

    尚、ご指摘箇所がございましたら
    ご教授いただけますと幸いです。

    ## はじめに

    では、まず前提として私の動作環境についてお伝えしておきます。

    – macOS Monterey 12.3.1 (M1)
    – Rails 6.1.5
    – MariaDB 10.6.7
    – Amazon マシンイメージ (AMI):「無料利用枠の対象 Amazon Linux 2 AMI (HVM), SSD Volume Type 64ビット (x86)」
    – インスタンスタイプの選択:「無料利用枠の対象タグの付いた t2.micro」
    – RDSも使用

    :::note warn
    注意
    以降、ややこしい記載があるので間違えないようにしてください。
    **ローカル環境**のターミ

    元記事を表示

    【ポートフォリオ】完全未経験が2ヶ月半で「自己内省アプリ」を完全SPA化して作ってみました【Nuxt, Rails, AWS】

    # はじめに
    ポートフォリオとして作成したWebアプリケーションの紹介記事です!
    自分について深く考える「**自己内省アプリ**」を作成しました。

    アプリとしても記事としても、まだまだ未熟な点が多いですが、これからブラッシュアップしていきたいと思います(随時更新予定)。:raised_hands:

    # 簡単に自己紹介
    * 医薬品メーカーの営業事務として働いている24歳。
    * フルタイムで働きながら週40時間以上、2ヶ月半の時間を投下して今回のアプリを作りました。

    # アプリの概要と開発経緯
    * **自己を深く内省(分析)する機会を作るWebアプリケーション**です。
    * サービス名は『**Insight**』にしました。
    * **自分を知るための様々な質問に回答し、記録**していきます。
    * **対象ユーザーは人生の分岐点が多い20〜30代**を想定しています。

    私は大学生の頃まで周りに流されて生きていたため、過去の選択に後悔も多く、「**自分って何がしたいんだっけ?**」と悩んだ時期がありました。
    当時たまたま出会った自己内省について書かれた本を読んだことで、自分の考え方の基

    元記事を表示

    Rails6.1 + MySQL + ReactでのDocker環境を構築する

    [株式会社TECH LUCK](https://techluck.co.jp/)という会社で代表兼エンジニアをしている齊藤です。

    SPAアプリケーションを作成するために、Rails6.1, MySQL, Reactでの開発を行いました。
    その際に、`docker-compose`で環境構築を行なったので、その備忘録になります

    **バージョン**
    Ruby:v3.1.0
    Ruby on Rails:v6.1.5
    React:v18
    docker-compose:v3.7

    # 基本のアプリケーション作成
    まずはプロジェクトのディレクトリ(RailsとReactを入れるための箱)を作るところから始めます。
    この記事では`todoapp`というアプリケーションを作成するという形にします。
    また、Railsは`backend`、Reactは`frontend`というアプリケーション名で作成することにします。

    “`bash
    mkdir todoapp
    cd todoapp
    mkdir backend
    mkdir frontend
    touch docker-compose.yml
    touc

    元記事を表示

    Ruby on Rails 6.1.5 を Ruby 2.7.6 から Ruby 3.0.4 にあげるときにやること

    掲題の作業を実施したところ、色々とハマったので、備忘録として残しておきます。

    ## 環境

    * Ruby 2.7.6 -> 3.0.4
    * Ruby on Rails 6.1.5

    ## Ruby 3.0.4 にあげるときに必要なこと

    ### (WEBrick 以外を使っていない場合) WEBrick をインストールする
    #### 理由

    Ruby 3.0.0 より WEBrick が標準ライブラリから削除されました。そのため、Ruby 3.0.0 以降で WEBrick を使いたい場合は、別途インストールが必要になります。

    https://www.ruby-lang.org/en/news/2020/12/25/ruby-3-0-0-released/

    ### bootsnap 1.9.3 以上にする

    Ruby 3.0.4 で `rails s` を実行すると以下のエラーが発生します。
    “`
    % bundle exec rails s
    $RUBY_HOME/3.0.0/gems/bootsnap-1.9.1/lib/bootsnap/compile_cache/iseq

    元記事を表示

    Ruby 配列の中にあるハッシュをeachで回す方法

    ## 実現させたこと
    ![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1248903/bf5eb9a1-d8fd-7661-7bad-b195478d4bd1.png)
    上の写真の左側は画像、右側はaタグでそのアカウントに飛ぶようになっている。
    ここまでやったこと順番に解説する。

    ## 実装手順
    ### データ取得
    “`
    apps/controllers/application_controller.rb

    insta_accounts = LvtInstaAccount.all
    @insta_info = []
    insta_accounts.each do |insta_account|
    data = {}
    data[“screen_name”] = insta_account.screen_name
    data[“profile_picture_url”] = insta_account.profile_picture_url

    元記事を表示

    ERROR: While executing gem … (Gem::RemoteFetcher::FetchError)|specs.4.8.gz

    Rails newでエラーが発生しました。
    以下IPv6環境の方は同じ問題かもしれません。

    “`
    Could not fetch specs from https://rubygems.org/ due to underlying error
    Could not find gem ‘importmap-rails’ in locally installed gems.
    “`

    # 解決方法
    ### 1.gemのURLにどのIPであれば接続できそうかを調べます
    wgetコマンドは接続に失敗した時、自動で他のIPを探してくれます。

    “`
    % wget https://rubygems.org/specs.4.8.gz
    –2022-04-22 18:06:23– https://rubygems.org/specs.4.8.gz
    rubygems.org (rubygems.org) をDNSに問いあわせています… 2a04:

    元記事を表示

    【初心者】Ruby on Railsでブログを作る

    # 概要 :feet:

    Ruby on Railsの学習をしています。
    1日1つRailsで練習アプリを作る生活3日目です。

    明日から、アプリ開発をしようと思っているので最終チェックですね!

    参考サイトのを簡略化して実装しているだけなので、詳しくしたり方はそちらをご覧ください。

    # 新規アプリを作成 :feet:

    “`shell
    ubuntu@ubuntuv:~/デスクトップ/projectX$ rails new blog
    ubuntu@ubuntuv:~/デスクトップ/projectX$ cd blog
    ubuntu@ubuntuv:~/デスクトップ/projectX/blog$ bundle update
    ubuntu@ubuntuv:~/デスクトップ/projectX/blog$ bundle install
    “`

    # Hello Ruby on Rails :feet:

    `GET`した`articles`リクエストを`ArticlesController`の`index`アクションに対応付ける
    つまり、`/articles`にアクセスが来たら、`hel

    元記事を表示

    Rails+docker環境構築でyarnが上手くインストールできない

    ## 概要
    Rails6系とdockerで環境構築する際に詰まったので、その原因と解決方法についてを書いています。

    ## 事象
    – dockerfileを使って、docker環境にRailsサーバを立てようとした。
    – その際、Railsを使う際の環境要件としてYarnが必要となるが、上手くインストールできなかった。

    webpackerをインストールしようとすると…
    “`
    RUN bundle install && rails webpacker:install
    “`
    バージョン1以上2以下のyarnが必要ですという下記エラーが発生。
    “`
    Webpacker requires Yarn “>=1 <2" ``` apt-get installでインストール済みと想定したが、上記エラーにより上手く入っていないことが分かった。 ``` RUN apt-get install -y yarn ``` ## 原因 - yarnのバージョンが古い エラー文の内容をヒントにして原因をググってみたところ、yarnのバージョンが古いと今回のようなエラーが発生するそう。 ## 解決方

    元記事を表示

    OTHERカテゴリの最新記事