Rails関連のことを調べてみた2021年03月20日

Rails関連のことを調べてみた2021年03月20日

gem Sidekiqの導入

## Sidekiqとは?
非同期処理を実行する時に使用するgemです。[公式ドキュメント](https://github.com/mperham/sidekiq)(の日本語訳)によると、得られるメリットはこちら。

> Rubyのシンプルで効率的なバックグラウンド処理。 Sidekiqはスレッドを使用して、同じプロセスで同時に多くのジョブを処理します。 Railsは必要ありませんが、Railsと緊密に統合され、バックグラウンド処理が非常に簡単になります。

今回は、Railsの課題を実施していく中で`sidekiq`を使いましょうとの指定があったので、それに沿って実装をしていきます。

## 非同期処理とは?

そもそも「非同期処理」というものがよく分かっていなかったのですが、[こちらの記事](https://qiita.com/nichenri1995/items/d66b055b09398483fa5b)で丁寧に解説されていました。

> 簡単に言ってしまえば時間のかかる処理を、通常の処理とは別に、「あとで処理しますよリスト」に登録すること。要はあるタスクを実行している間に他のタ

元記事を表示

Railsで画像投稿機能追加時のエラー(Gem refile)

Gemのrefileで画像投稿出来るのですが、
今回はこれでエラーが出ました。。。

## 環境

・Rails
・Docker

## エラー

“`markdown
RuntimeError in PostImages#index
“`

## 試したこと1

config/initializers/application_controller_renderer.rbへkeyを入れる

“`markdown
Refile.secret_key = ‘3a447761c12a06fca18f0184515ca946d2d62eb05a03e55f0fb1f9e4d490928ac6a61fd8b83d651cea1591be041e95a4fa3470256b6b1d84069f3035295b1cb1’
“`

⇨サーバーを再起動して、再読み込みをかけたが、同じエラーが出てくる。

何度か同じことを繰り返した結果、気づいたことが出ました。

**完全にループ状態に入っている状況。**

ということで、

サーバーの一度完全に強制終了することに。

実行中のプロセスを確認

元記事を表示

FactoryBot導入手順

## 初めに
FactoryBot導入手順をメモがわりに残します。
今回はRSpecの導入は終わっている前提で書いていきます。
## Gemの導入
Gemfileのgroup :development, :test do〜endの中に
gem ‘factory_bot_rails’の記述を書きます。

![]
(https://gyazo.com/b8cc4241adc7e47c584fc96650455d58.png)
書きましたらbundle installコマンドをターミナルに入力します。

“`
bundle install
“`

## ファイルの作成
specディレクトリの直下にfactoriesのフォルダを作成。
factoriesのフォルダのrubyファイルを作成します。以下の画像のようになります。
![]
(https://gyazo.com/4dd869e5768da7aec8d7de7e48ffb593.png)

## ファイルの中身を書く
![]
(https://gyazo.com/acb541ae614c66391be7dfc1f0a30aef.png

元記事を表示

初期データ作成方法(Rails)

#seedファイルの書き方

“`ruby:db/seed.rb
User.create!(
[
{
name: “ゲストユーザー1”,
email: “guest1@example.com”
},
{
name: “ゲストユーザー2”,
email: “guest2@example.com”
}
]
)
“`

“`
$ rails db:migrate:reset #データベースをリセット
$ rails db:seed #初期データ挿入

$ rails db:reset
“`

データベースのデータを削除した後
`rails db:seed`を実行して初期データの挿入できます。

`rails c`で実際にデータがあるか確認します。

“`
$ rails c

Running via Spring preloader in process 17596
Loading development

元記事を表示

Rails6でJavaScriptのファイルを読み込みたい!

Rails6にJavaScriptのファイルを読み込みたい方に向けてまとめました。

## 方法

### ①JSファイルを配置する場所を確認
Rails6の場合、`javascript/packs/`に配置します。

“`
//以下に配置
javascript/packs/

//フォルダを作成する場合
javascript/packs/フォルダ

“`

### ②JSファイルを作成する
Javascriptのコードを以下の記述で囲みます。

“`js:javascript/packs/xxx.js
document.addEventListener(‘turbolinks:load’, () => {

//ここにjsの記述を追加

})
“`

### ③JSファイルをapplication.jsでimportをする
最後に、`application.js`でインポートします。
ファイル読み込みの記述に注意しましょう。

“`js:application.js
//requireの下に配置

//=> javascript/packs/xxx.js

元記事を表示

お気に入り機能(非同期)

ポートフォリオの作成でお気に入り機能を非同期で実装したので、その箇所の記述についてアウトプットします。
モデル、コントローラー作成してアソシエーション記述した後の作業を書いていきます。

### 動作環境
rails6.0.0
ruby 2.6.5
### jquery導入

“`terminal
% yarn add jquery
“`

“`config/webpack/environment.js
const { environment } = require(‘@rails/webpacker’)
// 以下追記
const webpack = require(‘webpack’)
environment.plugins.prepend(‘Provide’,
new webpack.ProvidePlugin({
$: ‘jquery/src/jquery’,
jQuery: ‘jquery/src/jquery’
})
)
// ここまで
module.exports = environment
“`

“`appl

元記事を表示

Rails bundle install errrrrrrrror

## Gemfileに以下を入れて

“`markdown
gem “refile”, require: “refile/rails”, github: ‘manfe/refile’
gem “refile-mini_magick”
“`

以下のコマンドを打つと、、、、

“`markdown
docker-compose run web rails g model PostImage shop_name:text image_id:string caption:text user_id:integer
“`

## エラー

“`markdown
/usr/local/bundle/gems/bundler-2.2.15/lib/bundler/source/git/git_proxy.rb:223:in
`allowed_with_path’: The git source https://github.com/manfe/refile.git is not yet checked out. Please run
`bundle install` before tr

元記事を表示

CircleCIでRailsのテスト結果をSlackに通知してみた

# 概要
この度、仲間内でチームで自分たちのしているサークルのホームページを共同開発することになったのでcircleciのテスト結果をslackで表示させたいなと思い執筆することにしました。

# 流れ

1. slackにプロジェクト用のワークスペースとチャンネルを開設
2. slack api で通知用のAppを作成する
3. CircleCI の環境変数を設定する
4. CircleCI の設定ファイルを作成する

## 1. slackのワークスペース&チャンネル開設
まずは赤丸で囲まれている + ボタンより通知用のチャンネルを作成して下さい。
私の場合はカフェサークル用のプロジェクトなのでcafe-projectというチャンネル名にしてあります。
さらにciecleciのテスト結果を表示て着る用のチャンネルを作成しておきましょう。
公式だと`ciecleci-`とするのがよいみたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656158/900bb2ae

元記事を表示

[Rails] metaタグを設定する方法

#metaタグとは
SEO対策のうちの1つで、設定することでサイト名やタイトル名などや、OGP設定、Google検索に載せたくないページを設定することができます。

#metaタグ設定方法
##gemをインストールする
`Gemfile` に以下を追記して、 `bundle install` します。

“`:Gemfile
gem ‘meta-tags’
“`

##設定ファイルの作成をする
以下を実行すると、 `config/initializers/meta_tags.rb ` にデフォルトのファイルが作成され、titleの文字数制限やdescriptionの文字数制限などが編集できます。
デフォルトのままでもOKです。

“`
$ bundle exec rails g meta_tags:install
“`

##OGPの設定をする
OGPは、SNSのタイムライン上でURLがシェアされたときなどに表示されます。
`application-helper.rb` に以下を追記します。
[オプション(github)](https://github.com/kpumuk/m

元記事を表示

【Rails】ControllerTestの基本形について

railsではテスト駆動開発という、「テスト→実装」でアプリケーションを手法があります。
今回はそのテスト駆動開発のテストの基本形を書いてみました。

基本形

“`ruby:controller_test
require ‘test_helper’

class StaticPagesControllerTest < ActionDispatch::IntegrationTest test "should get home" do #homeに対してgetリクエストを送る get static_pages_home_url #リクエストに対して帰ってきた判定でテスト自体の成否を出す assert_response :success end end ``` 上記例では、ページ一つを表示させるリクエストに対して、そのレスポンスが正しく帰ってきているかを検証します。 このとき表示されたテンプレートの数を増やしてもいくのもありです。 これくらいざっくりでも、自動でテストコードが走るようになっているれば、リファクタリングする際

元記事を表示

【Rails】NameError: uninitialized constant Sidekiq::Loggingの解決方法【非同期処理】

#はじめに
現場で使える Ruby on Rails 5速習実践ガイド
「Chapter 7-8 非同期処理や定期実行を行う」でタイトルのエラーが発生。
タスク管理アプリのタスクフォームからタスクを投稿した時に非同期処理が実行されるプログラムを記述するも想定通りいかず、、、
#環境
Ruby 2.6.6
Rails 6.1.3
sidekiq 6.0.4
#結論
sidekiqのバージョンが新し過ぎたせいでコマンドがうまく実行されなかった模様。
なので、以下をgemfileに記載。

““ruby:gemfile
gem ‘sidekiq’, ‘~> 5.0’
““

記入後bundleからのrails sの後にredis-serverとbundle exec sidekiqを実行。
タスク投稿後、無事出力された。

““ruby
2021-03-19T15:05:18.659Z 10221 TID-ovjc2wymp SampleJob JID-82b7b80cec1cd3c40b4592ec INFO: start
2021-03-19T15:05:18.845Z 10

元記事を表示

MVCのモデルをわかりやすく説明

_現在、railsでアプリケーションを開発しながら勉強をしているのですが、
MVCモデルを使って開発をしていて、V=View「わかる( ´∀`)」要は画面の表示をするフロントの部分だ。
C=Controller「わかる( ´∀`)」routeファイルに書いたモデルの対応したアクション(メソッド)で処理内容が違うし、表示させるファイルを呼び出したり、リダレクトしたり、呼び出すモデルが違ったり対応するアクション(メソッド)によって
行う処理が全く違う。_

_ではモデルとは???
モデルのファイルにはbelongs_toやhas_manyなどのモデルの結びつきなどが記載されています。
よくググるとデータベースとデータのやりとりを行う機能を実装したりする。など記載されていますが
なんのこっちゃよく分からん( ゚д゚)
なので、自分なりにモデルとはこういうものだよと解説していきます。_
#モデルの概念
モデルとは日本語で、型や模型を意味しています。
この型とは?なんの型なのでしょうか?何を意味しているのでしょうか?
例えば「User」モデルがあるとします。Userとは使用者、使い手などを意味し

元記事を表示

Rakeタスクが、本当にWheneverを使ってcronで実行できているか試してみた。

Rakeタスクを作成して、Wheneverでcronの実行スケジュールを定義したけど・・・これって本当に実行できてるの?と思ったので、簡単なタスクとスケジュールを作って実行しログを確認してみました。

Rakeタスクを編集

“`publish.rake
namespace :publish do
desc “指定した時刻からの経過時間を表示”
task test: :environment do
time_now = Time.current
time = Time.local(2021,3,19,21,00,00)
puts “#{((time_now – time)/60).to_i}分が経過しました”
end
end
“`
今回はお試しなのでとりあえずシンプルな検証です。とはいえただ文字を出力させるだけじゃ味気ないので、ある時点の時刻 Time.local(2021,3,19,21,00,00) から、現在の時刻 Time.current までの経過時間を出力させる処理を記述します。時刻の差分は秒数で出力されるので、秒数を分数に

元記事を表示

いいね機能実装中にルートエラーmissing required keys: [:id]で時間が溶けた。

#いいね機能実装中にmissing required keys: [:id]がでた。

![スクリーンショット 2021-03-19 19.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933066/dc59cbc8-1c02-ab2f-d9f9-ca441ff2735c.png)

上記のようにいいね機能(recommend)を実装しrecommendボタンを押すと中間テーブルにuser_idとmicropost_idが保存され、redirect_backされて、下記のようにrecommend件数が増えるはずが
![スクリーンショット 2021-03-19 21.16.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933066/a63cee47-d636-b950-5800-2a2e58437248.png)

上記のようにはならず下記のようなエラーが発生。

![スクリーンショット 202

元記事を表示

【Rails】N+1問題とその解決方法

#はじめに
本記事ではRailsのアプリケーションを作成した際にN+1問題に直面したので、N+1問題の概要とその解決方法を紹介します。

#N+1問題とは?
N+1問題とはループ処理を行う際にSQLの発行がたくさん行われてしまい、サイトのパフォーマンスが下がってしまう現象です。

SQLの発行はサーバーの負担が大きいので、なるべく少ない回数にすることが望まれます。

# N+1問題の例
わかりやすくするために、以下のような記事を投稿できるアプリケーションを例にします。

usersテーブル

|id |name |
|—|—|
|1 |佐藤 |
|2 |鈴木 |
|3 |高橋 |
|4 |田中 |
|5 |伊藤 |

postsテーブル

|id |user_id |text |
|—|—|—|
|1 |3 |こんにちは |
|2 |4 |おはよう |
|3 |1 |おやすみなさい |
|4 |5 |ありがとう |
|5 |1 |さよなら |
|6 |2 |もしもし |
|7 |4 |楽しい

元記事を表示

マイグレーションファイルの基本

## マイグレーションとは?
マイグレーション(migration)とは辞書では「移行」の意味を持つ
ざっくりいうと「SQLなしでデータベースにテーブルを作成する機能」のこと。

## 作り方
ターミナルでコマンドを打つと作成できる

“`:ターミナル
# モデルと同時に生成
$ rails g model User
“`
モデルと同時に生成される複数ファイルのうちのひとつにマイグレーションが入っている。

“`:ターミナル
# 単体で生成
$rails g migration create_user name:string email:string gender:integer
“`
マイグレーションのみを生成する際には、ファイル名の後ろに[カラム名:データ型]を指定することで生成前に
テーブルを指定しておくことが可能。

## 基本の形
“`Ruby:db/migrate/[timestamp]_ファイル名.rb

class CreateUsers < ActiveRecord::Migration[6.1] def change create_tab

元記事を表示

Ubuntu20.04 LTSにnginx、Railsアプリケーションを配置する

### 環境

“`
Ubuntu20.04 LTS
git version 2.25.1
MySQL version 8.0.23
“`
### rbenvのインストール
“`bash:terminal
$ sudo apt update
$ sudo apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bashrc
$ ~/.rbenv/bin/rbenv init
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.bashrc
$ source ~/.bashrc
$ rbenv -v #インストールできたか

元記事を表示

バイナリーサーチ アウトプット

配列に任意の値が存在するかどうか、そして何番目に存在するのか
という問題です。

array=[1,3,5,6,9,10,13,20,26,31]
arrayの中から検索する数字は6です。

出力結果は、”6は配列の4番目に存在します” です。

“`ruby
def binary_search(array, number_of_elements, target)
left = 0
right = number_of_elements – 1
while left <= right center = (left + right) / 2 if array[center] == target return center elsif array[center] < target left = center + 1 else right = center - 1 end end return -1 end array=[1,3,5,6,9,10,13,20,26,31] puts "検索し

元記事を表示

RailsでMarkdownをリアルタイムでプレビューする(marked.js + highlight.js)

Rails初心者です。至らぬ点・誤り等ありましたら、やんわりとご指摘いただきたく存じます。

以前、Markdown記法に対応したビューを作る、というミッションで`redcarpet`と`rouge`というgemを使った[こちら](https://qiita.com/turtlekazu/items/a22935423b0c15e10a18)の記事を書かせていただきました。ですが、どうやらこのやり方だとリアルタイムでのプレビューができないぞ、ということが判明し改めて方法を調査した形になります。(`redcarpet`はrubyファイルのため、jsとのデータ授受に難儀が…)
自分はVue.jsやReactには不慣れなゆえ、純JavaScriptを使って書きたいという願望がありました。苦戦した部分を記事にさせていただきます。

# 結論
Markdown形式のリアルタイムプレビューがしたい場合、
Markdown表示には「`marked.js`」を
シンタックスハイライトには「`highlight.js`」を使う。
両方とも、CDN(コンテンツデリバリーネットワーク)を使う方法とライブ

元記事を表示

検索機能(画像も含む)でローカル上は正常、heroku上ではエラー 解決策

検索機能(画像含む)がある、簡単な投稿サイトポートフォリオを作成中に起きたエラー。
今回かなり時間を費やしてしまい備忘録のためと、他に困っている方などいましたらご参考までにして頂けたら幸いです!

プログラミング学習始め日が浅いため、コード等ではもっと上手な記述の仕方がありました、合わせてご指摘も頂けましたら幸いです。

今回発程したエラーはローカル上では検索機能(画像含む)が正常に動いているが、
herokuでデプロイした際に検索ボタンを押すと、エラーになるといった内容。

ransackのjemを導入済み。

始めに確認したことは、ターミナルでエラーログを確認。

`ターミナル`

“`
2021-03-19T05:26:08.790107+00:00 app[web.1]: [3211f911-070c-4c95-9858-435d1ef98f86] ActionView::Template::Error (Nil location provided. Can’t build URI.):
2021-03-19T05:26:08.790108+00:00 app[web.1]:

元記事を表示

OTHERカテゴリの最新記事