- 1. 症状
- 1.1. postgresqlのbundle installができない(sh: /usr/bin/pg_config: No such file or directory)
- 1.2. Railsで複数レコードを更新する書き方メモ
- 1.3. 【Rails】form_withとは?
- 1.4. gem acts_as_list の使い方
- 1.5. Rails memberとcollectionの違い
- 1.6. 【Rails】ajax化とは
- 1.7. インフラ素人が3週間でWebサービスのインフラを0から構築するためにやったこと
- 1.8. 【devise】暗号化前後のパスワードが一致しているか判定するメソッド
- 1.9. Mailgunのダッシュボードが開かない時(Railsチュートリアル学習)
- 1.10. deviceを使わないrequest specの基本的なテスト(Userモデルver.)
- 1.11. Railsのデザインパターン QueryObjectの作り方
- 1.12. rails 7.0では`config/initializers`配下のファイルが少なくなっている
- 1.13. railsチュートリアル第十四章 フォロワー
- 1.14. railsチュートリアル第十四章 フォローしているユーザー
- 1.15. railsチュートリアル第十三章 画像のリサイズ 本番環境での画像アップロード
- 1.16. Railsの関連付けのオプションについて
- 1.17. Heroku + MySQL + Rails6.0でstaging環境を用意する。
- 1.18. Rails 7.0.1 のプロジェクトで RSpec 実行環境をセットアップ
- 1.19. Githubにプッシュ&Herokuにデプロイまで
【Rails】routesのエラー「“’: No such file or directory 」の対処法
症状
railsで新たにアクションを追加しようと、routeファイルにルートを追加してサーバーを起動したところ下記のエラーが発生しました。
翻訳すると、「そのようなファイル、又はディレクトリはありません」でした“`ruby:error
rails s
=> Booting Puma
=> Rails 6.0.4.1 application starting in development
=> Run `rails server –help` for more startup options
Exiting
D:/app/config/routes.rb:28:in “’: No such file or directory – checkout (Errno::ENOENT)
from C:/appu/config/routes.rb:28:in `block (3 levels) in‘
from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/actionpack-6.0.4.
postgresqlのbundle installができない(sh: /usr/bin/pg_config: No such file or directory)
## **エラー内容**
新規プロジェクト作成時、
“`bash
rails new . –database=postgresql –skip-test
“`をした後、bundle installをしようとしたらできなかった?
“`bash
# エラー全文Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /Users/apple/workspace/runteq/muscle_beat/vendor/bundle/ruby/3.0.0/gems/pg-1.2.3/ext
/Users/apple/.rbenv/versions/3.0.2/bin/ruby -I /Users/apple/.rbenv/versions/3.0.2/lib/ruby/3.0.0 -r
./siteconf20220111-87208-7szvjs.rb extconf.rb –with-pg-config\=/usr/bin/pg_confi
Railsで複数レコードを更新する書き方メモ
#はじめに
Railsで複数レコードを作成、更新する際にActiveRecord::Base.transactionをどのように用いるかを調べた際のメモです。
主に以下を参考にさせていただきました。
https://qiita.com/aba0312/items/8b29cafe6b505b6a7a4f#例
例えば、ユーザーのバルクインサートを行う際に全てのインサートが成功しなければロールバックするという想定をします。“`ruby:User.rb
class User < ApplicationRecord def self.bulk_create(users) all_valid = true transaction(join_table: false, requires_new: true) do users.each do |user| # 何らかの処理 all_valid &= user.save end
【Rails】form_withとは?
##form_withとは?
form_withは、htmlのformタグを生成するためのメソッド。
##どうなるの?
「生成する」というのは少し難しい表現ですが、「置き換わる」と考えても問題ありません。
つまり、form_withのところに、
gem acts_as_list の使い方
## acts_as_listとは
indexページなどで一覧表示しているデータの並び替えを簡単の実装できるgenのことです。このgemを利用することで各データごとに ”↑”、”↓” などのリンクを表示させクリックすることでそれぞれの並びを一つ上、一つ下と変更することが簡単になります。
## acts_as_list使い方
・Gemfileに以下を追加し、bundle install
“`ruby
gem ‘acts_as_list’
“`・”position”カラムの追加
acts_as_listで並び替えをする際の基準となるカラムは、”id”ではなく”position”というカラムです。これはもちろん元々モデルにあるものではないため、もしモデルを作成済みであれば新くmigrationファイルを作り、カラムを追加する必要があります。
・migrationファイルの作成
Taskモデルにカラムを追加したい場合以下のmigrationファイルを作成します。
“`ruby
class AddColumnPositionToTasks < ActiveRecord:
Rails memberとcollectionの違い
#結論
memberを用いることでidを用いて特定のリソースに対してアクションを実行することができ、collectionを用いることで全てのリソースに対してアクションを実行することができる。##公式API
**member**
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-member
**collection**
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-collection#member
“`ruby:routes.rb
resources :users do
member do
get :hoge
end
end
“`
memberを使うとルーティングは以下のようになります。
![スクリーンショット 2022-01-10 15.28.02.png](https://qi
【Rails】ajax化とは
##ajax化とは
Asynchronous JavaScript + XML の略で、非同期通信と呼ばれる通信方法のこと。
Webブラウザ上で非同期通信を行い、ページ全体の再読み込み無しにページを更新する。##同期通信、非同期通信とは?
**◆同期通信**
クライアントとサーバー間の通信においては、通常、同期通信と呼ばれる方法が用いられ、“一瞬画面が白く“なった後、画面が切り替わるような通信は、全てこの同期通信となる。ページが一瞬真っ白になってから表示されるまでの間は、“ユーザーは他の操作を何もする事が出来ない。“また、同期通信は“ページ全体を1から作成して表示させている“ので、どうしても表示までの“時間がかかる。“
[![Image from Gyazo](https://i.gyazo.com/d839480fa2bd646c00eadd4e729af8ab.png)](https://gyazo.com/d839480fa2bd646c00eadd4e729af8ab)
**◆非同期通信**
一方、非同期通信では、クライアントからのリクエスト送信後、
インフラ素人が3週間でWebサービスのインフラを0から構築するためにやったこと
#目次
[1. インフラ設計](#1-インフラ設計)
[2. ネットワーク構築](#2-ネットワーク構築)
[3. サーバ・DB構築](#3-サーバdb構築)
[4. Lambdaによる自動化](#4-lambdaによる自動化)
[5. Amazon SES・SNS](#5-amazon-sessns)
[6. 開発環境構築(docker)](#6-開発環境構築docker)
[7. jenkins・phpmyadminなど開発ツール設定](#7-jenkinsphpmyadminなど開発ツール設定)
[8. VPN接続](#8-vpn接続)
[9. 起きた変化](#9-起きた変化)
[10. おまけ](#10-おまけ)# はじめに
インフラ素人同然レベルだった私が実務において、Webアプリケーションのインフラを0から構築することになりました。期間は約3週間、**インフラ設計から行い、構築したインフラ上でWebサービスが稼働できる状態**まで持っていくことがゴールになります。
約3週間の間、AWSやミドルウェア周りの技術に触れ、今まで考えてもみなかった知識の習得や、多くの
【devise】暗号化前後のパスワードが一致しているか判定するメソッド
## 実現したいこと
Railsでdevise gemを使っている環境にて、暗号化前のパスワードが暗号化後のパスワードと一致しているか確認したい。
例えば、以下のようなケースです。– 「このパスワードで設定したはずだがログインできず、パスワードがちゃんと設定されてるか確認してほしい」という問い合わせに対して調査する場合
– 有効期限を持たせた複数のパスワードを、過去履歴を含めてDBに保持しており、古いパスワードが入力された場合に「それは古いパスワードです」とアラートを出したい場合deviseでは、パスワードは暗号化されDBに保存されているため、DBのレコードを参照するだけだと、元のパスワードがどんなものだったかわかりません。
## 解決方法
「入力されたパスワードを自力で暗号化したものでDBを検索する」という方法もありますが、そこまでしなくても一発でわかる`valid_password?`メソッドがdeviseで用意されています。
レシーバにはActiveRecordインスタンス(パスワードが保存されたレコード)、引数に暗号化前のパスワードを指定します。## 基本例
“
Mailgunのダッシュボードが開かない時(Railsチュートリアル学習)
# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。Mailgunのダッシュボードが開かない(真っ白なページ)になる時の対処法の共有です。
## 背景
Railsチュートリアル学習の中で(11章)HerokuにMailgunというアドオンを入れるのですが、
`heroku addons:open mailgun`コマンド後にクロームで開こうとしてもうまくいきませんでした。![スクリーンショット 2021-12-31 083558.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/8ffb4ada-41eb-788a-172b-0fc8470abf24.png)
(真っ白です…)# 結論
グーグルクロームではなく他のブラウザ(Edge)などで開くとうまくいきます!# おわりに
お読みいただきありがとうございました、しょぼい記事ですみません?
どなたかの参考になれば嬉しいです。
deviceを使わないrequest specの基本的なテスト(Userモデルver.)
# まずは超基本テスト
WebブラウザからWebサーバーへHTTPリクエストを送り、Webサーバーから正常なHTTPレスポンスが返ってくるとき、そのHTTPレスポンスのHTTPステータスコードは`200`を返します。
“`spec/requests/user_spec.rb
require ‘rails_helper’RSpec.describe “Sessions”, type: :request do
describe “GET users” do
let(:test_user) { create(:user) }before do
session_params = { user: { email: test_user.email, password: test_user.password } }
post “/login”, params: session_params #コメント①
get posts_path #コメント②
endit “つぶやき一覧ページのリクエストが成功していること”
Railsのデザインパターン QueryObjectの作り方
#はじめに
Railsで利用されるデザインパターンの一つにQueryオブジェクトがあります。
複雑なActiveRecordモデルの絞り込みを簡単なクラスに閉じ込めることで、可読性と疎結合を保つことができます。
QueryオブジェクトをRelationに対し結合や絞り込み、ソートなどの操作を定義し、Relationを返すクラスとして定義し、
モデルのscopeとして利用することで、メソッドチェーンが利用できるようになります。#動作環境
Rails 6.1.3
Ruby 2.7.4#前提
レビューに対する通報機能があり、アイテムの詳細ページでアイテムに紐づいたレビューを一覧表示しています。
そして、レビューに対して通報がすると表示がされないように、自分が通報していないレビューの一覧を取得します。“`ruby:app/model/review.rb
class Review < ApplicationRecord belongs_to :product belongs_to :user has_many :reports, dependent: :destroy
rails 7.0では`config/initializers`配下のファイルが少なくなっている
# 概要
`rails new`直後の`config/initializers`配下の初期化ファイルの数が多くユーザの認知的負荷につながっていました。
その中には必ずしもすべてのアプリケーションに必要とは限らない設定や、過去のアップグレードの中で既に不要になっている可能性がある設定が存在していたため、今回ファイル構成が見直され不要あったと判断されたファイルが削除されました。## rails7.0以前
バージョン7.0以前のrailsでは`rails new`時にアプリケーションの初期設定のファイルが`config/initializers`配下に10ファイル作成されていました。
“`
$ rails -v
Rails 6.1.4.4
$ rails new sample_app
$ tree config/initializers/
config/initializers/
├── application_controller_renderer.rb
├── assets.rb
├── backtrace_silencers.rb
├── content_security_
railsチュートリアル第十四章 フォロワー
###フォロワー
####受動的関係を使ってuser.followersを実装する
app/models/user.rb“`rb
class User < ApplicationRecord has_many :microposts, dependent: :destroy # 他のモデルとの間に「1対多」のつながり # has_many関連付けが使われている場合、 # 「反対側」のモデルでは多くの場合belongs_toが使われます。 # dependent: :destroy # ユーザーが破棄された場合 # 、ユーザーのマイクロポストも同様に破棄される。 has_many :active_relationships, class_name: "Relationship", # :active_relationsshitpsデータモデル 能動的関係(フォローしているがフォローはされていない関係) # class_name: テーブル名 "Relationship"
railsチュートリアル第十四章 フォローしているユーザー
###フォローしているユーザー
####Userモデルにfollowingの関連付けを追加する
app/models/user.rb“`rb
class User < ApplicationRecord has_many :microposts, dependent: :destroy # 他のモデルとの間に「1対多」のつながり # has_many関連付けが使われている場合、 # 「反対側」のモデルでは多くの場合belongs_toが使われます。 # dependent: :destroy # ユーザーが破棄された場合 # 、ユーザーのマイクロポストも同様に破棄される。 has_many :active_relationships, class_name: "Relationship", # :active_relationsshitpsデータモデル 能動的関係(フォローしているがフォローはされていない関係) # class_name: テーブル名 "Relationship"
railsチュートリアル第十三章 画像のリサイズ 本番環境での画像アップロード
###画像のリサイズ
ユーザーに手元で画像サイズを変更させるのは不便です。
なので、画像を表示させる前にサイズを変更する(リサイズする)ようにしてみましょう。画像をリサイズするためには、画像を操作するプログラムが必要になります。
開発環境にインストールします。“`
sudo apt-get -y install imagemagick
“`
###画像処理用のgemを追加する
Gemfile“`
source ‘https://rubygems.org’
git_source(:github) { |repo| “https://github.com/#{repo}.git” }gem ‘rails’, ‘6.0.3’
gem ‘image_processing’, ‘1.9.3’
gem ‘mini_magick’, ‘4.9.5’
gem ‘active_storage_validations’, ‘0.8.2’
.
.
.
“`
“`
$ bundle insta
Railsの関連付けのオプションについて
## 概要
前回のモデルの関連付けの種類の記事の続きです。
モデルの関連付けの際に使用できるオプションについてアウトプットしていきたいと思います。
[前回の記事](https://qiita.com/soicchi/items/306206fb3eed1d377c6a)## 環境
ruby: ‘3.0.1’
rails: ‘6.1.4’## 前提
今回説明するにあたって下記のモデルを想定しています。usersテーブル
|id|name|
|:–:|:–:|
|1|user1|
|2|user2|departmentsテーブル(所属部署を管理するテーブル)
|id|name|
|:–:|:–:|
|1|営業部|
|2|開発部|Assignmentsテーブル(所属部署を管理するテーブル)
|id|user_id|department_id|
|:–:|:–:|:–:|
|1|1|1|
|2|1|2|
|3|2|1|## オプションの種類
### 1. through
`through`は__多対多__の関係のモデル同士を関連付ける際に、そのモデル
Heroku + MySQL + Rails6.0でstaging環境を用意する。
## 背景
個人アプリを開発していて、現状はローカル環境と本番環境しか用意していなかった。
本来であればstaging環境で確認後、本番環境にデプロイする流れが望ましいため、staging環境を準備することにした。## 前提
– Herokuで本番環境が用意できている。## 手順
### staging環境の作成
“`
heroku create –remote staging
“`これでstaging環境が作成される。
#### 参考記事
https://devcenter.heroku.com/ja/articles/multiple-environments
### 本番環境の環境変数をインポート + stagingの環境変数にセットする。
“`
heroku config -s -a “本番環境のアプリ名” > envvars.txt
cat envvars.txt | tr ‘\n’ ‘ ‘ | xargs heroku config:set -a “staging環境のアプリ名”
“``CLEARDB_DATABASE_URL、DATA
Rails 7.0.1 のプロジェクトで RSpec 実行環境をセットアップ
Ruby 3.0 x Rails 7 のプロジェクトで RSpec の実行環境を作る方法をメモ的に記します。
具体的には **RSpec と FactoryBot** gem をインストールして設定していきます。“`
# 環境情報
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]$ rails -v
Rails 7.0.1
“`結論からいうと Rails 7 独自の設定は特に必要ありません。
# プロジェクトを作成
Rails 7 では `rails new` のオプションでフロントエンド関連の色々を指定できますが、特に指定してません。“`
$ rails new rails7_rspec
“`# RSpec 環境用の gem をインストール
rails new した時に rails7_rspec ディレクトリに生成された Gemfile に追記します。“`
group :development, :test do
gem “debug”, pla
Githubにプッシュ&Herokuにデプロイまで
開発環境
mac OS バージョン11.6
エディタ
VScode“`
% rails new toy_app
% cd toy_app
“`group :production do
gem ‘pg’, ‘1.1.4’
end“`
% bundle config set –local without ‘production’
% bundle install
“`bundle install(もしくはbundle update)が完了したら、1.2.2でセットアップしたYarnを使ってWebpackerをインストールします。もしWebpackerを既にインストール済みの場合は設定を上書きするかどうかを聞かれるので、そのときは「no」と入力してください。(自分は表示が出ませんでした)
“`
% rails webpacker:install
“`最後に、GitでこのToyアプリケーションをバージョン管理下に置きます。
“`
% git init
% git add -A
% git commit -m “Initialize repositor