- 1. datetimeカラムのデフォルト値について
- 2. devise_token_auth ログアウトのテストコード実装時に苦戦したことをまとめる
- 3. [Rails]find_eachが無限ループして本番環境のメモリを食いつぶした話
- 4. 【rails】activehashについて
- 5. Railsアプリで画像の保存先をS3に変更する。その2
- 6. [Rails]Railsのバージョンを5.0→5.2に上げてみた
- 7. Gitに管理されたファイルを削除したい
- 8. Active Storageで複数画像の投稿・削除
- 9. タスク管理 アプリケーション作成手順
- 10. 【Mac】「Docker」で「Ruby on Rails 6」「React」と「MySQL 8」で環境構築(CRUDのサンプル付)
- 11. Rails 環境構築 railsコマンドでのエラー
- 12. ランキング機能のつくりかた【Railsの内部結合と外部結合を理解する】
- 13. Chromium 版 Edge を使った system test(2020/7/26 時点)
- 14. Rails基本 処理の流れ
- 15. gem ‘kaminari’ でページネーション実装
- 16. Ruby入門2
- 17. 【Rails+EC2+puma】rails s -e productionは問題ないのに、rails s -dで起動するとエラーになる
- 18. Rails Simple Calendarで記事投稿後、カレンダーに反映させたい。
- 19. RailsTutorialチートシート
- 20. Ruby入門
datetimeカラムのデフォルト値について
# datetimeカラムのデフォルトを現在時間にしたい
この前提のもと、migrationに
“`ruby:
t.datetime :created_at, default: DateTime.now
“`と安直に書いてmigrationすると、migrationされた日がデフォルト値になってしまう。
datetimeみたいに動的な値は、migrationされた時にしか計算されないためだ、と。
[Railsガイド>Active Record マイグレーション>3.5 カラム修飾子](https://railsguides.jp/active_record_migrations.html#カラム修飾子)# 設定方法
[こちらのPRで上がってました](https://github.com/rails/rails/pull/20005)
“`ruby:
t.datetime :created_at, default: -> { ‘NOW()’ }
“`これでdatetimeのデフォルト値を設定できました!
# 参考
他の記述方法もありました!参考にさせていた
devise_token_auth ログアウトのテストコード実装時に苦戦したことをまとめる
devise_token_auth でログアウトのテストコード作成時、エラー解決の情報が少なかったのでまとめます。
※ user の新規登録、ログイン、ログアウト機能を実装しているものとします。
※ FactoryBot を導入してます。## headers にログインに必要な情報が入っていないため、エラー発生
エラー発生時のコード
“`
describe “DELETE /v1/auth/user/sign_out” do
subject { delete(destroy_v1_user_session_path) }
context “トレーナーログアウト時” do
let(:user) { create(:user) }
it “トークンを無くし、ログアウトできる” do
subject
expect(response).to have_http_status(200)
end
end
end
“`エラー内容
“`
Failure/Error: expect(response).to have_htt
[Rails]find_eachが無限ループして本番環境のメモリを食いつぶした話
ActiveRecordにある便利メソッド`find_each`
実装の仕方が良くなくて無限ループしてしまい、本番環境でOOM killerによって強制停止させられるという事象が発生したのでその話について書きます。
※ この記事に登場するテーブルや実装などはすべて記事用にカスタマイズしています :bow:# find_eachとは
find_eachは何をしてくれるかというと、大量のデータを一度に取得してループするのではなく決まった単位(デフォルト1,000件)ごとに取得してループしてくれます。
大量データを扱うときに一括で取得してしまうと大量のメモリを使っていしまうのですが、find_eachを使って分割して取得することで少ないメモリで処理することができます。言葉で書いてもわかりづらいですね。下記が実行例です。
“`pry
# userが1万人いる場合
pry(main)> User.all.count
(1.1ms) SELECT COUNT(*) FROM `users`
=> 10000# eachを使うと一括で1万件取得される
pry(main)>
【rails】activehashについて
###Active Hashとは
ハッシュ形式の値をActive Recordと同じように操作できるようにするgem
Relationも貼れるので便利###基本的な使い方
以下のような書き方ができる“`ruby:app/models/plan.rb
class Plan < ActiveHash::Base self.data = [ {id: 1, name: "free"}, {id: 2, name: "silver"}, {id: 3, name: "gold"}, ] end class Plan < ActiveHash::Base self.data = [ {id => 1, name => “free”},
{id => 2, name => “silver”},
{id => 3, name => “gold”},
]
endclass Plan < ActiveHash::Base fields :name add id: 1, name: "free" add id: 2
Railsアプリで画像の保存先をS3に変更する。その2
## はじめに
[前回の記事](https://qiita.com/ysda/items/49fa6e8318c874a57b9e)からの続きです。## 安全にAWSのキーを扱えるようにする
AWSキーの漏洩を防ぐため、キーの内容は環境変数に設定します。
環境変数が分からない人はググって調べてみましょう!## AWSのキーの設定
carrierwave.rbのなかに[:access_key_id]や[:secret_access_key]といった記載がありました。
ここには予め設定したキーが入り、Rails5.2では「credentials.yml.enc」というファイルで管理されます。それではcredentials.yml.encをエディタで開いてみましょう。
以下のように暗号化された文字列が表示されると思います。
![スクリーンショット 2020-07-26 23.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429077/ab3cebe2-4098-b91b-c917-
[Rails]Railsのバージョンを5.0→5.2に上げてみた
# やりたいこと
Rails5.0系からRails5.2系にバージョンを上げたい。(Rails5.2から使えるようになった[Active Storage](https://railsguides.jp/active_storage_overview.html)を使いたかった。)この記事の趣旨は、**Rails5.0系からRails5.2系にバージョンを上げるために必要な手順**と**その際に発生したエラー対応**をご紹介したい(そしてActive Storage使いたい)というものです。
# 環境
Ruby 2.5.1
Rails 5.0.7.2# 手順
伊藤さんのQiita記事を大いに参考にさせていただきました。
[永久保存版!?伊藤さん式・Railsアプリのアップグレード手順](https://qiita.com/jnchito/items/0ee47108972a0e302caf)基本的には伊藤さんの記事を見ていただくのがわかりやすいです(本末転倒)。
ただ、「とりあえず早いとこバージョン上げたい!!」という方も少なからずいらっしゃるかと思うので、邪道的な形で見てい
Gitに管理されたファイルを削除したい
.gitignoreに書き忘れてcommitしてしまった時に、
「.gitignoreに追記すれば大丈夫…」
と誤解していませんか?
僕のように..汗後から.gitignoreに追記するだけではすでにGitに管理されたファイルは除去されないので、そんな時の対処方法を書いておきます。
# Gitに管理されたファイルを残して除外したい場合
“`
$ git rm –cached [除外したいファイル名]
“`
その後は必ず`.gitignore`に除外したいファイルを追記する。
注意箇所:
`–cached`を必ずつける!!
つけないとファイルごと削除してしまいます。# ファイルごと削除したい場合
“`
$ git rm [削除したいファイル名]
“`# ディレクトリごと削除したい場合
“`
$ git rm -r [削除したいディレクトリ]
“`# 最後に
Gitを使い始めた時に何回か忘れてcommitして、都度調べていたので備忘録として残しておきます。同じ境遇になった方のお役に立てば嬉しいです。
Active Storageで複数画像の投稿・削除
#環境
Ruby 2.5.1
Rails 5.2.4.3#やりたい事
Rails標準のファイル管理機能Active Storageを使い、画像を複数を投稿・削除できる機能を実装したい。###まずアプリを作成
“`
$ rails new sample_app
$ cd sample_app
$ bin/rails db:create
“`別ターミナルで
“`
$ bin/rails s
“`
http://localhost:3000 にアクセスして馴染みの画像が出ていればOK。###modelとcontrollerを作成
今回はpostという名前で。“`
$ bin/rails g model post
タスク管理 アプリケーション作成手順
#1. アプリケーション作成準備
##1-1. 作成するアプリケーションの内容を考える
| 機能 | 機能内容 |
|:—————–|:——————|
| 一覧表示 |全てのタスクを一覧表示する |
| 詳細表示 |一つのタスクの詳細内容を表示する |
| 新規登録 |新しいタスクをdbに登録する |
| 編集 |登録済みのタスクを編集し、dbを更新する |
| 削除 |登録済みのタスクをdbから削除 |##1-2. アプリケーション名を決め、雛形を作成
“`command
rails new アプリケーション名 [オプション]#例)
rails new taskmanage -d postgresql
“`##1-3. dbを作成する
アプリケーションを作成したディレクトリに移動しdbを作成する“`command
rails db:create
“`##1-4. サーバーを起動してみる
以下のコ
【Mac】「Docker」で「Ruby on Rails 6」「React」と「MySQL 8」で環境構築(CRUDのサンプル付)
# ■ はじめに
SESエンジニアとして、PHPをメインに参画し、現在はJava案件に参画しているTatsuyaです。
そしてこの度転職が決まりまして、9月から新しい職場に!!!!
楽しみもある反面、実は不安要素が。。。それは、、、
**次の職場は!!Ruby on Rails!!やったことない!!**> 僕「学習しないと転職した瞬間からお荷物確定ダァー」
と焦り散らかし始めて、先日からRuby on Railsの学習に励み始めたわけなのですが。。。
> 僕「Rubyの公式チュートリアルめちゃくちゃ大変すぎないか!?さらにHerokuとかも使うの!?結構大掛かり!?」
というので、実は挫折しちゃいました。。。
挫折理由としては、チュートリアル自体が骨太ということもありますが、 **Dockerを使った環境構築** も重なって折れちゃいました。~~(最弱)~~僕は、直接自分のMacにRuby環境は作りたくなかったんで、なんとしてでもDockerでローカル環境を整えたかったのです。~~(次の職場でもDocker使うみたいですしお寿司)~~
ということで、先人の方々が丁寧
Rails 環境構築 railsコマンドでのエラー
railsで環境構築をしている際に`rails server`コマンドを打ってもrailsコマンドが使えない、バージョン管理でのエラーがいくつか発生した。各エラー内容と解決した方法をまとめておく。
#実行環境
OS: MacOS
rubyバージョン管理:rbenv
railsバージョン:6.0.3.2
シェル:zsh#エラー内容
“`
$ rails server
“`
とうつと“`ruby
Rails is not currently installed on this system. To get the latest version, simply type:
$ sudo gem install rails
You can then rerun your “rails” command.
“`Railsは現在このシステムにはインストールされていません。
`sudo gem install rails` というコマンドで最新版のRailsをインストールすることができます。とのエラーが発生した。#やったこと
ここはエラーで指摘された通り
ランキング機能のつくりかた【Railsの内部結合と外部結合を理解する】
#概要
この記事は、実際に私が[BooQs](https://www.booqs.net/)で運用している「ランキング機能」を例にして、Railsのテーブル結合(内部結合と外部結合)を解説する記事です。#前提条件
Rails 5.1
#【?♂️Before】テーブル結合を使わないランキング機能
私が開発しているBooQsという英単語学習サービスでは、ゲーミフィケーションを用いてユーザーの学習意欲を高めるために、英単語の解答数(userのもつanswer_historiesの数)によるユーザーのランキング機能を実装しています。
しかし、以下のNewrelicのダッシュボードを見ていただくとわかるように、自分の書いたランキング機能
Chromium 版 Edge を使った system test(2020/7/26 時点)
# はじめに
macOS で Chromium 版 Edge を利用するようになったけど、そういえば Rails の system test で使えるのかな? と思ったのでやってみました。2020/7/26 時点の話です。
# Edge 用 WebDriver の準備
Chromium 版・旧版の両方の WebDriver を [WebDriver – Microsoft Edge Developer](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) からダウンロードします。zip ファイルを解凍し、自身の PATH 環境変数が通ったところに配置しましょう。
“`bash
$ cd ~/Downloads
$ ls
msedgedriver*
$ cd ~/bin/
$ mv ~/Downloads/msedgedriver .
“`# selenium-webdriver gem alpha版
調べてみたところ [selenium-webdriver gem の CHANG
Rails基本 処理の流れ
#railsの処理の流れ
user/indexをリクエストした場合
gem ‘kaminari’ でページネーション実装
# 準備
* Gemfileに’kaminari’追加“`
gem ‘kaminari’
“`* bundle install
# 実装例
* Itemモデルから1回の検索で50レコード取得する“`
Item.all.page(1).per(50)
“`* 配列に対して実装する場合
“`
1ページに対して10レコードずつ表示する
Kaminari.paginate_array(array).page(params[1]).per(10)
“`
Ruby入門2
#initialize
newメソッドでオブジェクトを生成するとき、そのオブジェクトのinitializeメソッドが実行される“`ruby
class User
attr_reader :name, :address, :email
def initialize(name, address, email)
@name = name
@address = address
@email = email
end
end
“`#private
privateと書かれた行より後に定義されたメソッドはprivateメソッドとなり、オブジェクトの内部からは利用できるが、外部からは利用不可“`ruby
class Person
def initialize(money)
@money = money
enddef billionaire?
money >= 10000000
endprivate
def money
@money
end
end
“`#継承
既存のクラスが持っている機能を基本的に全部引き継いだ上で、一部を変
【Rails+EC2+puma】rails s -e productionは問題ないのに、rails s -dで起動するとエラーになる
## 環境
Rails: 6.0.2.2
ruby: 2.7.1
Puma: 4.3.5EC2+Nginx+puma
pumaのソケット通信を利用## 発生した問題
作成したアプリケーションをEC2へデプロイしました。
本番環境での起動も問題なかったのでデーモンで起動しようとしたのですが、pumaがうまく起動していないようで、ブラウザからアクセスすると「We’re sorry, but something went wrong.」の文字が…“`bash
$ rails s -d -e production
=> Booting Puma
=> Rails 6.0.2.2 application starting in production
=> Run `rails server –help` for more startup options
“`うまく行っていれば下記のように表示されるはずです。
“`bash
=> Booting Puma
=> Rails 6.0.2.2 application starting in production
=> R
Rails Simple Calendarで記事投稿後、カレンダーに反映させたい。
Simple Calendarにて
記事投稿→カレンダー投稿画面(create)→カレンダーに反映という事を行いたいのですが、
現状、記事投稿は出来ていて、そこから記事投稿のタイトルデータを抜き出してカレンダー投稿画面にタイトルのみデータを表示取得させたいです。
※こちらの画面ではTitleが入力フォームになっていますがこのTitleを、記事のTitleを取得したいです。試した事ですが
RailsTutorialチートシート「RailsTutorialをやったはいいが、2週間もしたら何をしたか思い出せなくなる」
「結局自分には何ができるのか」「俺は…弱い…!」
そんな人のためのチートシートです。
とりあえず保存をして、こっそりコピペして、色々付け加えながら自分だけのチートシートを作りましょう。
# 機能要件
[Rails]検索機能
https://qiita.com/shin1rok/items/779e581e9d12a92310c3
[Rails]文章投稿機能
https://railstutorial.jp/chapters/user_microposts?version=5.1#cha-user_microposts
[Rails]画像を投稿したい(外部ライブラリ – CarrierWave)
https://railstutorial.jp/chapters/user_microposts?version=5.1#sec-basic_image_upload
[Rails]投稿した画像が大きくなっちゃう
https://railstutorial.jp/chapters/use
Ruby入門
#irb
対話的な実行環境
#####オブジェクト型を確認する
”文字列”(レシーバ).class → String
1.class → Integer
#####object_idを確認する
”文字列”.object_id → 実行されるたび別のオブジェクトが作られる
1.object_id → 同じ数値オブジェクトが提供される
#####オブジェクトを結合する
message1 = “メッセージ1”
message2 = “メッセージ2”
message1.concat(message2) ※括弧の省略可
message1 = メッセージ1メッセージ2#文字列オブジェクト
人間が読むことのできる文字や記号で構成された、単語や文章のようなデータ
ダブルクォーテーションで内容を囲む(シングルクォーテーションでも可)#数値オブジェクト
数を表すオブジェクト#クラスとインスタンス
オブジェクトがどんな機能持てるかは、そのオブジェクトがどんなクラスのオブジェクト出るかで変わってくる。Rubyが標準的に用意しているクラス(組み込みライブラリ・標準添付ライブラリ)