- 1. 単体テストの下準備 手順
- 2. 【Ruby on Rails】退会機能をgemなしで実装する方法
- 3. トランザクションとは。
- 4. [rails] nginx + unicorn + mysql (aws EC2 RDS) production環境立ち上げ時のメモ
- 5. Rails mapメソッドとchartkickでグラフを量産する
- 6. pathの引数について
- 7. 【Rails】N+1問題についてのまとめ
- 8. 【Rails】Sprockets::DoubleLinkErrorを解消する
- 9. 【第13章】Railsチュートリアルでheroku pg:reset DATABASEを実行時に警告がでる
- 10. 廃棄PCのantix上にrubyonrails環境構築テスト
- 11. Rails + React 画像読み込み方法
- 12. エラー【Module not found: Error: Can’t resolve ‘@popperjs/core’】が分からんかった
- 13. Gemfileで使われる「~>」とは
- 14. masterブランチで作業してしまった時の対処法
- 15. プルリクエストでコンフリクトが発生した際の対処法
- 16. 保守運用の際に既存メソッドの定義場所を調べるメソッド[Ruby, Rails]
- 17. Railsのアクションについて
- 18. 【Rails】rails s するとA server is already running.が発生する
- 19. 共同開発
- 20. 【Rails】PV数閲覧数機能(メモ)
単体テストの下準備 手順
※著者がiMacユーザーの為、
コマンドは「ターミナル」で実行するものとして記述しています。Ruby on Railにおける
単体テストの手順をまとめます。1. gem ‘rspec’インストール
2. rails g rspec:install
3. .rspecに–format documentation
4. rails g rspec:model モデル名#1. gem ‘rspec’ インストール
Gemfileに記述後、コマンドでbundle installをかけます。
注意点は、Gemfileの行末ではなく
group :development, :test do
の箇所に記述するところ。“`ruby:Gemfile
group :development, :test do
# Call ‘byebug’ anywhere in the code to stop execution and get a debugger console
gem ‘byebug’, platforms: [:mri, :mingw, :x64_mingw]
【Ruby on Rails】退会機能をgemなしで実装する方法
#対象者
* 退会機能を実装予定の方
#目的
* 退会機能を実装して退会後、ログイン出来ないようにする
#実際の手順と実例
###1.deviseの導入User認証で新規登録とログインを行うためにdeviseを導入します
https://qiita.com/nao0725/items/83c73c417be01913a857
“`Gemfile.
gem ‘devise’
“`““Terminal.
$ bundle install
$ rails g devise:install
$ rails g devise user name:string is_valid:boolean #①
$ rails g devise:views
““①で退会したかどうかを判断するカラムを作成しています。
booleanは真偽のどちらの値なのかを決めるデータ型です。boolean型はデフォルト値を設定する必要があるので、マイグレーションファイルを編集します。
“`db/mi
トランザクションとは。
# はじめに
本記事では、トランザクションについて記述しました。
トランザクションとはなんですか?
と聞かれた際に、私は何も答えることができませんでした。
悔しかったので調べました。# トランザクションとは
`レコードの更新を行う複数の処理を1つにまとめて行うこと`を指します。トランザクションを利用することにより、
「処理の一部は成功し、一部は失敗した」という事象は発生せず、
`すべての処理の成功または失敗のみの状態`を作ることができます。### Railsではこのような利用
“`ruby
ActiveRecord::Base.transaction do
処理1
処理2
処理3
…
end
“`
ここに処理1、処理2…を1つのまとまりとして記述することで、
処理が1つでも失敗すれば、全体としての処理は失敗ということになります。# トランザクションのACIDプロパティー
以下を参照しています。
トランザクションは、銀行のATMに例えることが多いみたいです。
かなりわかりやすいので勝手にオススメです。
[トランザクションの ACID プロパテ
[rails] nginx + unicorn + mysql (aws EC2 RDS) production環境立ち上げ時のメモ
#はじめに
初心者がRailsチュートリアルのやり方を~~無視~~アレンジして無謀にもAWSでデプロイしたためにエラー地獄にハマった軌跡をメモとして残しました。
(ミドルウェアもチュートリアルと変えてます。WEBサーバー:nginx + unicorn、DB:mysql(RDS))#参考記事
「rails aws」で検索して上位に出てきた [こちら](https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1 ”世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで”)の記事を参考(めちゃくちゃ助かりました。)#環境
Rails 6.0.3
ruby 3.0.2
unicorn v6.0.0
nginx/1.20.1
mysql 8.0.2#unicorn.rb
`listen`のパスを`{app_name}/tmp/unicorn.sock` に変更する(pidも同様)。[こちら](https://zenn.dev/noraworld/articles/deploy-rails-ap
Rails mapメソッドとchartkickでグラフを量産する
# はじめに
こんにちは。
Rails6アプリケーションでgem”chartkick”とmapメソッドを使って、対応するデータのグラフを自動的に量産する方法について解説します。
Rails5をお使いの方はchartkick導入時のコマンドが変わるらしいので[公式サイト](https://chartkick.com/)を参考にしてください。# chartkickの導入
まず以下のようにgemfileにchartkickを追記します。“`ruby:gemfile.rb
gem “chartkick”
“`
その後いつも通りbundle installします。
yarn addコマンドでWebpackerを走らせて依存オブジェクト(cahrtkick)の追加とインストールを行います。( [yarn add の解説](https://classic.yarnpkg.com/en/docs/cli/add) )“`zsh:terminal
bundle install
yarn add chartkick chart.js
“`
最後に、javascript:app/java
pathの引数について
Rspecでテストを書いているとき、下記の実装に関してpathの引数に`task.project`が使われていることに疑問を感じておりました。
“`ruby
describe ‘Task詳細’ do
context ‘正常系’ do
it ‘Taskが表示されること’ do
visit project_task_path(task.project, task)
#project_task_path(project, task) ではだめなの?
expect(page).to have_content(task.title)
expect(page).to have_content(task.status)
expect(page).to have_content(task.deadline.strftime(‘%Y-%m-%d %H:%M’))
expect(current_path).to eq project_task_path(task.project, task)
end
end
【Rails】N+1問題についてのまとめ
#N+1問題とは?
N+1問題とは、データベースからデータを取り出す際に、大量のSQLが発行されてパフォーマンスが低下してしまう問題のことです。
__N+1問題の具体例__
railsではallメソッドやfindメソッドを使ってデータベースからデータを取得しています。
ターミナルのログを見ると実際には下のようにその都度SQLが実行されています。“`SQL:SQL
Product Load (2.7ms) SELECT `products`.* FROM `products`
“`
__usersテーブル__| id | name |
|:-:|:-:|
| 1 | 山田 |
| 2 | 新井|
| 3 | 田中 |
| 4 | 北川|__productsテーブル__
| id | product | group_id|
|:-:|:-:|:-:|
| 1 | カレー | 2 |
| 2 | 魚 | 1 |
| 3 | 焼肉 | 3 |
| 4 | 刺身 | 1 |「1人のuserは複数のproductsを持つ関係なので、Userモデル
【Rails】Sprockets::DoubleLinkErrorを解消する
###1.背景
Ruby on Railsを使用して共同開発を行っています。
他の方の実装分を追加後、`rails s`でサーバーを起動すると表題のエラーが表示されました。今回はエラー解消の手順と原因を備忘録としてまとめます。
###2.環境
– mac.os バージョン10.15.6
– Ruby 2.7.3
– Rails 6.1.3.1
– psql (PostgreSQL) 12.6###3.該当のエラーと原因
今回のエラーは下記です。
“`ruby
ActionView::Template::Error (Multiple files with the same output path cannot be linked (“top.css”)
In “/Users/hogehoge/rails/team_p
【第13章】Railsチュートリアルでheroku pg:reset DATABASEを実行時に警告がでる
[Railsチュートリアル第13章(第6版)](https://railstutorial.jp/chapters/user_microposts?version=6.0#code-micropost_model_image_validation)で、herokuでレコードを削除する際に手間取ったので備忘として記録する。
#①heroku pg:reset DATABASEを実行すると警告がでる
チュートリアル終了時にherokuのDBをリセットしようとすると、“`Warning: Cannot open browser“`が表示されて実行されない。#②解決方法
“`heloku login –interactive“`を実行すると、正常にログインできる。
参照:https://qiita.com/yadon/items/db3ec786ec410990cec6#③再度heroku pg:reset DATABASEを実行
表示されるメッセージ通りに入力すれば、成功する。
参照:https://qiita.com/kakiuchis/items/5597354b1
廃棄PCのantix上にrubyonrails環境構築テスト
# rubyonrails-test
* 家の廃棄予定のノートPC(Pentium)にantixをいれて、rubyonrails+node.js環境構築のテスト
* rubyは新しいものがいれられなかったため、2.6.3をビルドしている
* 結論:nodeがうまくいれられずに断念## 環境構築 mac
* VSCode拡張
* Ruby
* HTML Snippets* Rubyのインストール
“`zsh
# update
brew update# rbenv
brew install rbenv ruby-build
echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
source ~/.bash_profile# readline
brew install readline
brew link readline –force# ruby
RUBY_CONFIGURE_OPTS=”–with-readline-dir=$(brew –prefix readline)”
# install rub
Rails + React 画像読み込み方法
## 手順
1. 画像ファイルを app/assets/images へ配置
2. config/webpacker.yml に追記
3. jsx ファイルに Component を作成### 1. 画像ファイルを app/assets/images へ配置
適当な画像ファイルを“`app/assets/images“`へ配置します。
### 2. config/webpacker.yml に追記
“`ruby:config/webpacker.yml
# Additional paths webpack should lookup modules
# [‘app/assets’, ‘engine/foo/app/assets’]# resolved_pathsを下記のように変更
resolved_paths: [“app/assets/images”]
“`### 3. jsx ファイルに Component を作成
“`jsx:test.jsx
import Image from ‘test.png’;export de
エラー【Module not found: Error: Can’t resolve ‘@popperjs/core’】が分からんかった
Rails6でwebpackerを起動したときに出たエラー
“`ruby
% bin/webpack-dev-server
…
ERROR in ./node_modules/bootstrap/dist/js/bootstrap.esm.js
Module not found: Error: Can’t resolve ‘@popperjs/core’ in ‘/Users/username/hoge_app/node_modules/bootstrap/dist/js’
“`
入れているBootstrap5とpopperjsを使っている場合、入れ方の問題のよう。
yarnでBootstrapを入れているときは確認しておきたい`% yarn add @popperjs/core`
Bootstrap5でpopperjsを使うときは上のコマンドで入れてからwebpackerを立ち上げたら無事立ち上がった。
https://yarnpkg.com/package/@popperjs/core
Gemfileで使われる「~>」とは
#「~>」とは
今後のバグ修正のみ受け入れたい場合に使用する。
“`
# 6.1.3以上、6.2.0未満
gem ‘rails’, ‘~> 6.1.3’
“`“`
# 4.1.0以上、5.0.0未満
gem ‘puma’, ‘~> 4.1’
“`#参照
https://yu8mada.com/2018/04/22/what-does-tilde-greater-than-sign-mean-in-gemfile/https://qiita.com/awakia/items/5745938c192ca1139c63
masterブランチで作業してしまった時の対処法
####<手順>
1, まずは修正内容を確認する。
“`bash
$ git status #ターミナルに作業した内容、変更した内容が出てくる
“`2, 修正内容を別の場所に一時保管する。
“`bash
$ git stash
“`その後もう一度`git status`をすると先ほどの修正内容はなくなり、ターミナルに下記のような文章が出るはず。
“`bash
On branch master
Your branch is up to date with ‘origin/master’.nothing to commit, working tree clean
“`3, 本来作業をしたかったブランチに切り替えorブランチ作り切り替える。
“`bash
git checkout -b ○○○
“`4, 一時保管していた内容を切り替えたブランチに適用する。
“`bash
git stash apply
“`
プルリクエストでコンフリクトが発生した際の対処法
#そもそもコンフリクトとは?
直訳すると「衝突」という意味。
ファイル上で「自分の作業」と「他人の作業」が重複してしまった状態のことを指す。
#発生原因
「同一ファイル」の「同一箇所」を複数人が編集した状態でマージした時に発生する。
また、ローカルブランチをpushした後にmasterブランチに変更を加えてしまうことでも発生する。
#`git pull –rebase` を使った対処法
###<手順>
1, masterブランチを最新にして、作業ブランチをチェックアウト
“`bash
$ git checkout master
$ git fetch origin
$ git pull origin master
$ git checkout [作業ブランチ]
“`2, 作業ブランチに対してmasterブランチをrebaseする
“`bash
$ git pull –rebase origin master
“`3, コンフリクトがあれば直す
“`bash
error: Failed to merge in the changes.
保守運用の際に既存メソッドの定義場所を調べるメソッド[Ruby, Rails]
## 想定
1. 既存のアプリの改修を担当することになった
2. 独自に定義されているメソッドについて、どこで定義されているか知りたい## 結論
**メソッドがどこで定義されているか調べるメソッド**
“`ruby
method(“メソッド名”).source_location
#=> [“/Users/user_name/dir1/dir2/app/helpers/application_helper.rb”, 78]
# これが定義場所
“`## 使い方
このメソッドは、`binding.pry`を用いたデバッグ中やrailsコンソール時などに用いることが可能です。(恐らく
以下では、`binding.pry`を用いたデバッグを用いて、メソッドの定義場所を調査しています
“`html:app/views/layouts/application.html.erb
:
<%= flash_messages %>
<% binding.pry %>
<
Railsのアクションについて
基本的事項の復習。
#1. Railsにおける7つのアクション
|アクション|役割|HTTPメソッド|
|–|–|–|
|index|リソースの一覧を表示する|get|
|new|リソースの新規作成|get|
|create|リソースを新規作成して保存する|post|
|show|記録されたリソースの詳細表示|get|
|edit|リソースの編集|get|
|update|リソースの更新|patch/post|
|delete|リソースの削除|delete|
#2. newとsaveの違い
newのコマンドはリソースの生成のみを行うので、このままではDBに反映するにはsaveのコマンドの実行も必要になる。
createは生成して保存を行うため、イメージとしてはnew+saveというアクション。
【Rails】rails s するとA server is already running.が発生する
#はじめに
表題の通りですが、rails sするとA server is already running.となってしまい、serverが立ち上がりませんでした。“`
$rails s
=> Booting Puma
=> Rails 6.0.4 application starting in development
=> Run `rails server –help` for more startup options
A server is already running. Check /home/ec2-user/environment/all-mng/tmp/pids/server.pid.
Exiting
“`#解決策
logに出てました。“`
A server is already running. Check /home/ec2-user/environment/all-mng/tmp/pids/server.pid.
“`
となっているので、
server.pidを一度削除して、rails sすると解決しました。#参考記事
[A serve
共同開発
インターン生で共同開発をしようという提案が通り、レシピを投稿する簡単なサービスを開発しました。共同開発したサービスの概要、過程、利用したツール等についてまとめていきます。
##メンバー
僕を含めた3人(特に分野を決めていませんでしたが、結果的に僕が開発、他2人が設計中心になりました。「[特に苦労したこと](#特に苦労したこと)」)# サービス概要
### Food Frofessor
レシピを投稿し、編集、お気に入り登録、コメントができる基本的なサービスです。
[特に苦労したこと](#特に苦労したこと)の経緯や、「共同開発」を経験するといった目的が理由でそこまでハイレベルなサービスにしませんでした。
![food_frofessor-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/848640/f9de6ff9-4f5b-f941-f34e-951d0b92e165.png)URL: https://food-professor.herokuapp.com/top (初回のみデータの読み
【Rails】PV数閲覧数機能(メモ)
#やり方
まず`Gemfile`に`impressionist`を追記。
“`ruby:Gemfile
gem ‘impressionist’
“`“`:ターミナル
$ bundle install
“`
次に`impressionist`テーブルを作成します。
“`:ターミナル
$ rails g impressionist
“`マイグレーションファイルが生成されるので`rails db:migrate`をします。
“`ruby:
class CreateImpressionsTable < ActiveRecord::Migration[6.1] def self.up create_table :impressions, force: true do |t| t.string :impressionable_type t.integer :impressionable_id t.integer :user_id t.string :controller_name t.st