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

Rails関連のことを調べてみた2021年05月18日
目次

データベースの設定について

#データベース設定の変更
##database.yml
Railsアプリケーションのデータベースの設定ファイルです。
database.ymlは、configというディレクトリ内にあります。

Ruby on Railsは、このdatabase.ymlを編集することで、データベースの設定を運用環境ごとに変更できる仕組みになっています。

##運用環境
システムをどこで使用するか定められている環境を運用環境と呼びます。
運用環境を使い分けることで効率的に作業を行うことが可能です。

運用環境には3つの種類があり、以下のような使い分けをします。

“`
運用環境 通称 概要
development 開発環境 主にアプリケーションを開発をする際に使用する環境
test テスト環境 アプリケーションの動作をテストする際に使用する環境
production 本番環境 アプリケーションを実際にリリースする際に使用する環境
“`
なぜこのように環境が分かれているかというと、環境ごとに設定の変更が必要なケースが多く存在するためです。
たとえば、開発環境であれば「バグを

元記事を表示

AWS(EC2)にデプロイをして、SSL化するまでに参考にした記事を紹介します

AWSへデプロイをして、SSL化を行った際に参考にした記事を共有させていただきます。
これからAWSへのデプロイを考えてる方の参考になったら嬉しいです:relaxed:
(RDSは使用してません。)

【デプロイ】
以下の動画を参考に作業を進めました。

2点ほど躓いた点があり、解決するために参考にした記事も載せさせていただきます。
1. MySQLのインストール
動画内で選択されているEC2インスタンスがなかったため、「AmazonLinux2」を選択しました。
こちらのインスタンスにはデフォルトではMySQLが入っていないため、下記に記事を参考にインストールしました。

https://qiita.com/miriwo/items/eb09c065ee9bb7e8fe06

2.Nginxのインストール
こちらもAmazon Linux2にはnginxのyumが無いので、下記の記事を参考にインストールしました。

https://qiita.com/tamorieeeen/items/07743216a3662cfc

元記事を表示

rails-ujs が原因 (No route matches [GET]  エラー)get じゃなくて deleteしたいねん。

## 内容
Rails-ujsとはなんなのか

## Rails-ujsとは
Railsの一部のRESTfulな動作や非同期な処理などを実現するために、JavaScriptの送信に関する処理などが書かれたライブラリ!

例えば、Viewヘルパーの form_with の remote: true オプションだったり、 link_to の method: :delete などのオプションを「それっぽく動くように」動作させられるようになる。

## どこにあんの

“`js:app/javascript/packs/application.js
// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You’re encouraged to place your actual application logic in
// a relev

元記事を表示

ExecJS::ProgramError がGemfileにcoffee-script-source ver1.8 を追加しても解消されない。

現場で使えるRuby on Rails5速習実践ガイドを進めていて、P.99の `http://localhost:3000/` にアクセスするところで ブラウザ上に`ExecJS::ProgramError`が表示されました。

解消するまでに苦労したので、記録しておきます。

### エラー内容(ローカルホストアクセス時のrails serverログ)
“`shell
Started GET “/” for ::1 at 2021-05-18 01:20:01 +0900
(0.4ms) SELECT “schema_migrations”.”version” FROM “schema_migrations” ORDER BY “schema_migrations”.”version” ASC
↳ /Users/{ユーザ名}/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.5/lib/active_record/log_subscriber.rb:98
Processing by Task

元記事を表示

【rails】bootstrap導入時のExecJS::ProgramErrorの解消法

## エラー概要
bootstrap4のgemをインストールし、rails sでサーバーを立ち上げてページを表示しようとしたところ、ExecJS::ProgramError , TypeError: cannot read property ‘version’ of undefined と表示されてしまいました。(2021/5/15)

以前の開発では問題なく導入できていましたが、今回突然できなくなったため、その原因を探してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/918398/fb438ee0-6789-0d53-15a9-fd6a75c4d0e9.png)

## 動作環境
– rails 5.2.6
– ruby 2.6.3
– linux

## エラーの原因
2021/5/14にリリースされたexecjs2.8.1が依存関係にあるautoprefixer-railsに対応していないことが可能性として高いです。

さらに詳しく

元記事を表示

データベース検索data取得

このようなテーブルがあるとします。

|id|name|email|create_at|update_at|password|
|-|-|-|-|-|-|
|10|kasandra|hiphop@glove.com|2021-05-17 23:00|2021-05-18 23:18|hjkl|
|11|Andrew|terrace@earth.com|2021-05-17 23:11|2021-05-18 23:20|uioo|
|12|James|beach@boat.com|2021-23:17|2021 05-18-23:23|wery|

①find:idを検索キーとしてデータを取得するメソッド(複数取得可能)

**id以外のキーでは検索できないので注意**。具体的な使い方は上記ユーザーテーブルのidが11の人のオブジェクトを取得したい時です。

“`rb:
@user = User.find(11)Copy
“`
これで@userインスタンスにidが11の人のデータが取得されました。引数に(10, 11)としてあげれば配列として、両方のオブジェクトを取得できます。

元記事を表示

【rails×Bootstrap】Bootstrap.jsを活用した動的なタブの実装

#実装すること

* bootsrap.jsを使用して動的なタブを実装します。
公式でいう「Javascript Behavior」が該当します。

Bootstrap: https://getbootstrap.jp/docs/4.5/components/navs/#javascript-behavior

# 完成形

* タブをクリックするとロードせずに切り替えができます。
* 内容は設定した内容で表示ができます。
![gif (9).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1029483/86121230-b471-e455-8d57-23581c6d3fba.gif)

# 前提

* bootstrapをインストールしていること。
以下、私のgemのバージョンと記載方法です。

“`:Gemfile
gem ‘bootstrap’, ‘~> 4.5’
gem ‘jquery-rails’
“`

“`css:assets/stylesheets/applicatio

元記事を表示

ActiveAdmin の定義済みコールバックを使う際の注意点 ~ 保存に失敗しても after_save は実行される ~

## 前置き

ActiveAdminの定義済みコールバックに関しては以下の記事がわかりやすいです。
(参考にさせていただきました、ありがとうございます :bow: )

https://qiita.com/SakaiYuki/items/c579f2a4578f4e878849

## 何が起きたか

### 状況

ActiveAdminにてデータを保存したあとに特定の処理を実行したかった。

“`rb
ActiveAdmin.register User do
after_save do |user|
# 保存後に実行したい処理
end
end
“`

これで良さそう…?

### 問題

`after_save` 内の処理が、**バリデーションに引っかかり実際には保存されなかった場合にも実行される。**
`after_create` など他のコールバックも同様です。

## なぜなのか

ActiveSupport::Callback の `after_save` の場合、バリデーションに引っかかり保存できなかった場合には実行されません。
そのため、上記の

元記事を表示

ターミナル上で入力した文字が表示されなくなった時

cloud9のターミナルにて作業中に、突然文字が表示されなくなりました。
ただし画面上に表示されなくなっただけで、処理は行われます。
以下のような感じ。

“`:ターミナル
$ #←本当はrails cと入力しているけど、表示されない

>Running via Spring preloader in process 7447 #→処理は行われる
Loading development environment (Rails 5.2.6)
[1] pry(main)>
“`

このような現象が発生した場合は、以下コマンドを入力すれば表示されるようになると思います。

“`
$ stty sane
“`

ターミナルの特殊文字に変更が加わって、それが復元されない場合に発生するそうです。
突然発生して焦りましたが、次回からは焦らず対処しようと思いました。

元記事を表示

[Rails]検索フォームでの検索機能/複数カラムを対象とした検索機能の実装

# 記事の概要
 投稿された記事を文字列で検索し、検索された投稿記事を一覧表示する機能の実装方法をまとめた。テーブルの特定カラムを文字列検索対象としている。複数カラムを対象とした検策もできる。

# 検索の流れ
  検索フォームから検索ワードを入力し送信する。
 → 検索ワードが格納されたparamsをコントローラーで受取り、検索メソッドに渡される。
 → 検索メソッドを実行、モデルから文字列検索結果を取得、コントローラでインスタンス変数に代入。
 → ビューでインスタンス変数が展開されて表示。

# 実装手順
 実装手順は下記の通り。
 ①ルーティングの設定
 ②検索メソッドをモデルに定義
 ③検索アクションをコントローラーに定義
 ④検索フォームをビューに記述
 ⑤検索結果の表示をビューに記述

### ①ルーティング設定
 検索表示機能はarticlesコントローラーのsearchアクションとして定義する。collectionメソッドで設定する。

“`ruby:config/routes.rb
Rails.application.routes.draw do
devis

元記事を表示

Rails5で検索ボックスのplaceholderにFontAwesome5のアイコンを表示したい!

# やりたかったこと

– ruby 2.6.3
– rails 5.2.6
– webpacker 5.3.0
– Font Awesome 5 (yarnでインストール)

で,こんな風にして,検索フォームにFont Awesome 5 の虫眼鏡マーク(Unicodeはf002)を出したかった。

“`slim:index.html.slim
= form_with url: search_path, method: :get, local: true do |f|
= f.text_field :search, class: ‘fa_icon’, placeholder: “\uf002 検索ワードを入力”
= f.submit “検索” # ↑ここ!
“`

でも,表示してみると文字化けして□が出てきてしまう…

# 解決方法

以下の記事(Rails6でしたが)を参考に解決しました!

https://qiita.com/sasakura_870/items/7f72c80f89d66

元記事を表示

RailsでBootstrapのgemをインストールした後に、ExecJS::ProgramErrorが出てしまう時の解決法

いろんな方の記事や、質問の答えをなど見て、様々な解決策試してみましたがどれもうまくいきませんでした

私と同じような境遇の方がいらっしゃれば一度

“`
$ bundle update
“`

してみて下さい、私はこれだけでうまくいきました
gemで指定したBootstrapのバージョンが古かったことが原因でした。なのでアップデートすれば解決です

元記事を表示

バリデーションでユーザー新規登録時に、ユーザー名にuniquenessで一意性を持たせると、ユーザー編集時にも同じ名前で保存となるためバリデーションに引っかかってしまう。これを防ぐには?

“`ruby
validates :name, uniqueness: true, on: :create
“`

こうしてビルドインのバリデーションヘルパーの:onをつけて、バリデーションを実行したいタイミングのアクション名を記述する。

元記事を表示

Dockerを使ったRuby on Rails + MySQLの環境構築手順

## `Docker`,`Rails`,`MySQL`の環境構築手順の記録

Railsのデフォルトホーム画面を表示させるところまで。

**環境**

* Windows10
* Ruby2.7.1
* Rails6.0.3.1
* MySQL8.0

### 1.Docker for Windowsをインストール
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
上記リンクにアクセスしてインストールする。
インストールが出来たら一度再起動してから、Dockerを起動させる。

### 2.必要ファイルの作成
任意の場所にディレクトリを作成する。

次にVScodeで作成したディレクトリを開く。
インストールがまだの場合は以下リンクからインストール
https://azure.microsoft.com/ja-jp/products/visual-studio-code/

* **Dockerfileの作成**

VScodeでディレクトリを開けたらディレクトリ内に`Dockerfile`を作成

元記事を表示

ActionView::SyntaxErrorInTemplateの解決

#作業内容#
新規登録、ログインのパスを記述していた

#構文エラー#
記述した後にリロードで確認をしたら

“`
ActionView::SyntaxErrorInTemplate in FurimasController#index
“`
https://gyazo.com/e2deabd5a357543bb01255a15d1fb144
となっていました

#解決#
構文エラーは単純なものが多いので構文があっている確認をしましょう!
今回はif文を使ったのに<% end %>の記述がなかったのでエラーになりました。

元記事を表示

【個人開発】iOSショートカットアプリのレシピ共有サービス『ShortcutPlus』を作りました

## はじめに
iPhoneには**ショートカット**という便利なアプリがあります。
**レシピ**と呼ばれる操作手順書を登録しておけば、その機能を簡単に呼び出せるというもの。

忙しい日々をちょっとだけ効率化してくれるような、そんなレシピをもっと使いたいという思いからこのサービスを開発しました。

## サービス概要
レシピを検索して探したり、自分が作ったおすすめレシピを投稿してシェアできるサービスです。

・アプリURL:https://www.shortcutplus.com/
・GitHubリポジトリ:https://github.com/TYIRI/shortcut_plus

### 作った背景

ショートカットを使っている中で下記の問題を感じており、これらを解決したいと考えました。

* レシピがあちこちに散らばっており、ブログやYouTubeなどを一つずつ見ていく形で探しにくい。
* 自作した凄いレシピを教えたいけど、気軽に言う場所がない。

## 使い方

### 1. レシピを探す
**カテゴリ(未選択可)×キーワード**で検索ができます。
また、**カテゴリ・タグ

元記事を表示

Rspec,FactoryBotのsequence

sequenceの書き方で疑問に思った事があったので書きました

環境
Rails 5.2.3
ruby 2.6.4

RSpecの基本において参考にしたのは以下

[使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 – Qiita](https://qiita.com/jnchito/items/42193d066bd61c740612)

そんな中、自分が携わってる資料で出てきた
### **sequence(シーケンス)**

“`ruby
FactoryBot.define do
factory :task do

sequence(:title, “title_1”) # ← これ
content { “content” }
status { :todo }
deadline { 1.week.from_now }
association :user
end
end
“`

こいつが分からず詰まった。

他のcontent,status,deadline,associationは分かるのよ。

元記事を表示

AMI復元サーバで libMagickCore.so.5: cannot open shared object エラーが出た時の対応

# サーバを一台増やそうと思ってAMIから復元してデプロイしたらエラー

“`
LoadError: libMagickCore.so.5: cannot open shared object file: No such file or directory
“`

`libMagickCore` がないと言われてしまいます。

## 解決策
これサーバによってインストールされる場所が微妙に異なるので、再インストールしてあげないといけません。

“`
bundle exec gem uninstall rmagick
bundle install
“`

自分で過去にSlackにエラー対応書いておきましたが、ネット上にもバックアップ。

元記事を表示

railsでdeviseのパスワード再設定メールを実装(:recoverable)

#目標
Mac
Ruby ‘2.5.9’
Rails ‘6.1.3’

#目標
deviseでログインのパスワードを忘れた時、
パスワード変更できるようにパスワード再設定のメールを送信。

#導入
gem’devise’をbundle install後、ターミナルにdeviseのセットアップ文?が表示されるので、従います。
このあたりは、もっとよくまとめてくださっている記事があるので、最低限、、、

“`config/environments/development.rb
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.

# (略)
# mailer setting
config.action_mailer.default_url_options = { host: ‘localhost’, port: 3000 }
end
“`

deviseが使えるuserモデルとビューを作成。下

元記事を表示

ActiveSupport::Concernを簡単に解説!

# Consernとは何か
モデルやコントローラーの処理において、共通している処理を別ファイルにまとめることでDRYなコードを書くことが出来るものです。
これにより効果的なリファクタリングが可能です!

# 基本的な使い方
以下のようなモデルがあるとします。
同じ処理をしているので、こういった処理に対して`ActiveSupport::Concern`を利用してリファクタリングを行う。

“`app/models/user.rb

scope :foo, -> {puts ‘foo’}
scope :bar, -> {puts ‘bar’}

“`

“`app/models/post.rb

scope :foo, -> {puts ‘foo’}
scope :bar, -> {puts ‘bar’}

“`

sample_concern.rbのようなファイルを作成し、共通した処理を記述する。

“`app/models/concerns/sample_concern.rb
module Sample
extend ActiveSupport:

元記事を表示

OTHERカテゴリの最新記事