Rails関連のことを調べてみた2020年12月26日

Rails関連のことを調べてみた2020年12月26日

【AWS】ログの確認方法について

#はじめに

ポートフォリオ作成中で、自動デプロイ時にUnicornに関するエラーが発生しました。
エラーの内容についてはファイルの場所が悪かったという簡単な内容だったのですが、ログの確認を怠り
(というよりログの確認方法を理解していなかった)、解決までに時間を要したので、コマンドを含め記述していきたいと思います。

#環境

Ruby on Rails ‘6.0.0’
Ruby ‘2.6.5’

#エラー内容

これまでCapistranoによる自動デプロイはできていました。ローカルでアプリケーションを編集後、いつもの
ようにデプロイのコマンドを実行すると、下記のエラーが出現しました。

“`
01:12 unicorn:start
(省略)
SSHKit::Command::Failed: bundle exit status: 1
bundle stdout: Nothing written
bundle stderr: master failed to start, check stderr log for details
(省略)
“`

#解決に向けて

エラー文を参照

元記事を表示

Rails + Docker環境でBetterErrorsを表示する

“`
$ docker-compose up
“`

コマンドを打っても通常のエラー画面が表示される。

解決策

“`ruby:config/enviroments/development.rb
if Rails.env.development?
BetterErrors::Middleware.allow_ip! “0.0.0.0/0”
end
“`

このコードを追記する。
BetterErrorsはdevelopmentでしか使っていないらしいです!
なのでenvで条件をつけます!

以上です。。。

元記事を表示

クリスマスのN + 1

# はじめに

12月25日。世間はクリスマス当日ですが、そんなことは置いておいて
分かっているようであやふやだった`N+1問題`について、備忘録として今一度まとめました。
(書いていたら、タッチの差で日付変わってましたが…)

## 開発環境
Ruby 2.6.5
Rails 6.0.3.4
MySQL
Visual Studio Code
(GoogleChrome)

# N+1問題とは
N+1問題とは、**テーブルがアソシエーションを利用することで、結びつくテーブルが多くなり、データベースへのアクセス回数が多くなってしまう問題**です。
SQLが沢山発行されてしまうことで、データベースに負荷がかかり、アプリケーションのパフォーマンス低下の原因となります。

## N+1問題の例
個人で作成した、ToDoリストアプリ的なもので例をあげます。
ToDoリストそのものはlistsテーブルと、リスト内の項目はitemsテーブルです。
一つのリストは沢山の項目を持っているので、下記のような1対多のアソシエーションが組まれています。

### listsテーブル
| Column | T

元記事を表示

Railsチュートリアル備忘録(3章 3.3.2)

## 環境
macOS Catalina 10.15.5
Rails 6.0.3

Railsチュートリアルとそれに付随するいろいろを書いていきます。
Githubに慣れたいので、チュートリアルは第6版に準拠しています。

## 3.3.2 Red
/static_pages/aboutというURLからビューを表示させたい。
`$ rails t`からどのような順番で確認していくか?

###結論
①`config/routes.rb`にURLを作る
②`app/controllers/static_pages_controller.rb`にaboutアクションを作る
③`app/views/static_pages`に`about.html.erb`(ビュー)を作成する

###概要
test追加

“`test/controllers/static_pages_controller_test.rb
test “should get about” do
get static_pages_about_url
assert_response :success
end

元記事を表示

rails環境におけるdocker-compose upでexited with code 1エラー解決方法

初めての記事投稿。

Docker-compose upでrailsアプリをブラウザにて「localhost:3000」のurlで接続したことを確認し1日放置した結果、接続しようとしても更新してもブラウザに表示されなかった。

一旦dockerのコンテナを削除し、再作成し、起動してみた。

“`ターミナル
Docker-compose down
Docker-compose build
Docker-compose up -d
“`

最後の行で

“`ターミナル
rails_web_1 exited with code 1
“`

と固まってしまったので、コンテナ状態を見てみると

“`ターミナル
docker-compose ps
“`

“`ターミナル
Name Command State Ports
————————————————————-
rails_db_1 docker-entrypoint.sh

元記事を表示

備忘録(課題:モデルテストコード)

画像ファイル付きのモデルテストコードで忘れていたのでアウトプットします。

テスト用画像をアプリケーションファイルへ配置するためにpublicディレクトリにimagesディレクトリを作成

作成したimagesディレクトリの中に画像を配置する
例:(public/images/テスト用画像ファイル)

“`ruby
class Item < ApplicationRecord belongs_to :user has_one_attached :image 省略 validates :image, presence: true end ``` validatesは、presence: trueで良いみたいでした。 該当のfactoriesディレクトリに画像を開くための記述をする #### afterメソッド 任意の処理の後に指定の処理を実行することができる after(:build) とすることで、インスタンスがbuildされた後に指定の処理を実行できる ```ruby FactoryBot.define do factory :item do

元記事を表示

railsでアプリケーションを立ち上げたらすること

# はじめに
「Ruby on Rails 5 速習実践ガイド」のアウトプットを行うための投稿です。
業務でrailsを使用しているため、知識をプライベートでも蓄えようと思い取り組んでます。
今回は、本書のアプリケーションを立ち上げ後の設定関連を投稿します。

# 目次
1. [slimファイルに変換](#Chapter2)
1. [bootstrapの導入](#Chapter3)
1. [scssファイルに変換](#Chapter4)
1. [エラーメッセージの日本語化](#Chapter5)
1. [モデルのカラム名を日本語化](#Chapter6)
1. [参考文献](#reference)


# slimファイルに変換
Gemfiileの最終行に、以下を追加

“`Gemfile
gem ‘slim-rails’
gem ‘html2slim’
“`

記述後ターミナルで以下を実行

“`
bundle install
bundle exec erb2slim app/views/layouts/ -d
“`

2行目のコマ

元記事を表示

null byteエラーが発生したときの対処

# やりたいこと

①S3から複数のZipファイルを取得

②複数のzipファイルを解凍しディレクトリ形式にする

③最終的に1つのzipファイルにしたい。

# 起きた問題

①でget_objectしたところ、以下のようになってしまい、②で必要なファイルパスが取得できない状況。

`PK\u0003\u0004\u0014\u0000\u0000\u0000\u0000\u0000\xA1\x9AYQ\u0000\u0000\u0000`

“`ruby
client = Aws::S3::Client.new(
:region => ‘ap-northeast-1’,
:access_key_id => ‘***’,
:secret_access_key => ‘***’,
)
@orders.each do |order|
obj = client.get_object(
bucket: “*”,
key: order.zip_file_name
).body.read

Rails.logger.debug obj.inspect

元記事を表示

Rails チュートリアル 第6章 備忘録

第6章の備忘録

##環境
Rails 6.0.3
Ruby 2.6.3

##目次
[1 rails console –sandbox](#1-rails-console—sandbox)
[2 new と update メソッドの違い](#2-new-と-update-メソッドの違い)
[3 検証 Validation](#3-検証-validation)
[4 セキュアなパスワード](#4-セキュアなパスワード)

###1 rails console –sandbox
`rails console`と違って、終了時にrolbackされるのが特徴!
データベースを変更せずに色々試したい場合はこちらを使う。

###2 new と update メソッドの違い
####newメソッド
saveメソッドと併用して、データベースに保存する。

####updateメソッド
updateメソッドは成功時に更新と保存を一括で行う。
ただし、1つでも失敗するとupdateメソッド自体が失敗する。
もし、特定の値のみupdateしたい場合は**update_attribute**メソ

元記事を表示

【MiniMagick使用時】CircleCIのテスト環境で躓いたので備忘録

twitterで毎日積み上げ報告しています。よかったらフォローお願いします。

# 状況
ローカル環境では上手くいっていたRSpecテストが、CircleCI上ではエラーになる事案が発生しました。画像整形のために使用したminimagickが原因で生じたエラーです。エラーログは以下の通りです。

# 開発環境
– Docker
– Rails6
– CircleCI(自動テスト)
– RSpec

# 使用技術
– carrierwave (画像アップロードのためのgem)
– minimagick (画像整形のためのgem)

## エラーログ(CircleCIのtestジョブ)
“`
Failure/Error: let(:food_record) { create(:food_record) }

ActiveRecord::RecordInvalid:
バリデーションに失敗しました: 画像を入力してください, 画像MiniMagickがファイルを処理できませんでした。画像を確認してください。エラーメッ

元記事を表示

seeds.rbを本番環境に反映させる方法

###はじめに
開発環境から本番環境に移行する際に、seeds.rbの内容は本番環境のデータベースに引き継がれないので、本番環境でseeds.rbをデータベースに反映させる操作が必要になります。

###環境
* Rails 5.2.3
* AWS ( RDS : MySQL 5.7.22 )

###手順
1.EC2にログインする。
2.作成したアプリ上に移動する。

“`
 cd アプリ名
“`

3.currentディレクトリに移動する。

“`
 cd current
“`

4.railsコマンドを実行。

“`
 rails db:seed RAILS_ENV=production
“`

以上

###終わりに
初学者+Qiita初投稿のため、分かりにくい記事かもしれないですが、何かのお役に立てれば幸いです。

元記事を表示

Kaminari – Railsのページネーション機能追加

#ページネーションとは

**pagination ・・・ ページ付け、ページを示す数字**
[weblioより引用](https://ejje.weblio.jp/content/pagination)

ページ付けとあるように、”ページを持たせる”という認識でOKです。

例えば、多くの人が使う投稿アプリで一覧表示で全ての投稿を表示するとしましょう。
ページネーションなしだと、全ての投稿が1ページの中に表示されてしまいます。
投稿数が10個程だと問題ありませんが、複数人が使うようなアプリで全ての投稿を一度に表示すると、1ページに100, 1000と表示されてしまい、非常に見づらくなります。カオス状態です。。。

しかし、ページネーションを使えば、非常に多くの投稿があっても、1ページに表示する投稿数が決まっています。
よって、カオス状態とならず、数ページにわたって投稿を表示することができます。

#kaminari
Railsのgemの1つで簡単にページネーション機能を実装することができます。
なお、今回は掲示板一覧表示機能にページネーション機能を実装します。

英語ですが、Gith

元記事を表示

【Ruby on Rails】Bcryptとはなんなのか?

#はじめに
Bcryptとはなんぞや?

#Bcrypt
パスワードをハッシュ化するための関数を提供するgemのこと。
※bcryptのハッシュは復号化できないようになっている。
最初からgemfilelに記載されているものではないけど、gemfileに記載自体はされているのでコメントを外せば使える。

“`ruby:Gemfile
gem ‘jbuilder’, ‘~> 2.7’
# Use Redis adapter to run Action Cable in production
# gem ‘redis’, ‘~> 4.0’
# Use Active Model has_secure_password
# gem ‘bcrypt’, ‘~> 3.1.7’
“`
↓コメントを外して、`bundle install`を実行する。

“`ruby:Gemfile
gem ‘jbuilder’, ‘~> 2.7’
# Use Redis adapter to run Action Cable in production
# gem ‘redis’, ‘~> 4.0’
# Us

元記事を表示

【Ruby On Rails】入力したテキストを改行させて表示させたい場合に用いるsimple_formatの使い方

備忘録です。

# simple_formatを用いない場合

“`ruby:show.html.erb
<% @hoges.each do |hoge| %>
<%= hoge.text %>
<% end %>
“`

# simple_formatを用いた場合

“`ruby:show.html.erb
<% @hoges.each do |hoge| %>
<%= simple_format(hoge.text) %>
<% end %>
“`

# ポイント
simple_format()という形の括弧内に表示させたい対象コードを記述する。

元記事を表示

Hotwireでリアルタイムなチャットを作る

## はじめに

12/23にRuby on Railsの生みの親:DHH氏が`Hotwire`という新しい`gem`について言及され、それが話題になっているようだったので試してみた記事です。

元記事を表示

食べログの大規模なレガシーシステムを段階的に改善していく取り組み

こんにちは、食べログシステム本部長の京和です。
今年の4月から本部長になりました。さらに4月に娘が生まれました:tada:

本エントリでは食べログで1年を通じて取り組んだ、大規模なレガシーシステムの段階的な改善について紹介します。[\[翻訳\] Shopifyにおけるモジュラモノリスへの移行](https://qiita.com/tkyowa/items/ae9fa550237cb6f48318) に続いて2記事目のアドベントカレンダーになります。

# どのように段階的に進めるか
食べログは今年で15年目のサービスで、Railsになってからは13年が経過しています。これだけ歴史があればあちこちにガタが来ているのは当然で、無数にある課題に対してどこからどのように取り組んでいくかを最初に決める必要がありました。

まず最初の前提として以下のように考えました。

– 既存のビジネスや開発を止めるような悪影響を与えない。むしろなるべく早くポジティブな影響を与えていきたい。
– これだけ歴史のあるシステムを改善していくのは長い時間がかかるため、取り組みの価値について経営陣やビジネスサイドか

元記事を表示

Raspberrypi4にCloud9をインストールしてRailsの開発環境を整える

##あいさつ
初めての人ははじめまして!知っている人はこんにちは!
独学でプログラミングを極めるAtieです!
今日は[Railsチュートリアル](https://railstutorial.jp/)をしていくためにRaspberrypi4(以下ラズパイ)にCloud9をインストールし開発環境を整えます
もともと第一章はクラウドの開発環境でしていたのですが無料プランだったので少ししか使えずいっそのことラズパイにCloud9をインストールしてしまおうと思ったのがはじめです
では!

##環境
サーバー: Raspberrypi4 4GBモデル
OS: Raspberry Pi OS Lite Release date: December 2nd 2020
メインPC: Surface pro7
メインPCのOS: Fedora32 Workstation

##1.ラズパイのセットアップ
まずはラズパイのセットアップをしていきます
###OSイメージのダウンロード
RaspiImagerを使おうとしましたが自分のOSはFedoraなので[公式サイト](https://www.raspbe

元記事を表示

【Appleログイン】Sign in with Appleの実装手順(Ruby on Rails編)

## 対象読者

– Ruby on Railsで作成したWebアプリケーションにAppleログイン(Sign in wth Apple)を実装したい人

最近色々なサービスで頻繁に見かけるようになったAppleログインですが、その実装手順に関して意外と日本語の情報が少ないように感じたのでメモ書きとして残しておきたいと思います。

Dockerfileを書き始めるところから始めるので、ちゃんと手順に沿っていればとりあえず同じように再現できるはずです。

## 下準備

まず最初に環境構築のため各種フォルダ・ファイルを作成します。

### ディレクトリを作成

“`
$ mkdir sign-in-with-apple-sample
$ cd sign-in-with-apple-sample
“`

### 各種ファイルを作成

“`
$ touch Dockerfile
$ touch docker-compose.yml
$ touch Gemfile
$ touch Gemfile.lock
“`

“`dockerfile:./Dockerfile
FROM rub

元記事を表示

【Rails6】Dockerによる開発環境構築

#はじめに

先日開発環境にDockerを導入しましたが、記事に書いてあるコードをほとんど模写したような状態であったため、本日改めてコードの意味を確認するため、記述していきます。

なお、環境構築を行うにあたり、参考にさせて頂いた記事は以下です。

[docker ruby(2.6.5)・mysql(5.6.47)・rails(6.0.0)の開発環境構築](https://qiita.com/Tomohisa_koyama/items/5f2d32fd0677aa244b72)
[既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】](https://qiita.com/DaichiAndoh/items/66bf631f72698b5c2a53)
[Docker + rails6 + MySQL + bootstrap,jqueryまで環境構築完全ロードマップ](https://qiita.com/rakko1124/items/ff698a966b94ebe8aa7e)
[Docker公式:Railsクイックスタート](https

元記事を表示

Deviseのモヤモヤを解消して快適なRailsライフを送ろう!

[Zenn](https://zenn.dev/)に投稿した記事の転載です。
https://zenn.dev/kitabatake/articles/start-to-like-the-devise

この記事は、Railsのユーザー認証機能のgemとして有名なDeviseを使っていて感じがちな、モヤモヤを解消することを目的としています。
私自身がモヤモヤを感じていたため、このようなタイトルにしましたが、単に「Deviseに対する理解を深める」目的で読んでいただければと思います。

[Devise](https://github.com/heartcombo/devise) はとても便利ですよね。
installして、configファイルを設置して、モデルの設定をして、routes.rbに`devise_for`を書くだけで導入できます。
たったこれだけで、、

– ユーザーの新規登録画面の作成
– ログイン画面の作成
– パスワードを忘れた際の画面の作成
– `authenticate_user!`や`user_signin?`のようなユーザー認証向けの各種メソッドの付与
– et

元記事を表示

OTHERカテゴリの最新記事