- 1. deviseの導入の仕方
- 2. 「ログアウトしますか?」の確認メッセージを表示させたい
- 3. Rails 504 time outエラー対応
- 4. 【Rails devise】deviseの導入と追加するカラムの許可
- 5. Slack API の始め方をまとめました
- 6. RSpecを実行すると、 Lock wait timeout exceeded; try restarting transaction mysqlというエラーがでる
- 7. Railsで、現在時刻・日時を表示させる方法
- 8. 【Rails】form_withの使い分け
- 9. [rails]突然自動デプロイが反映されなくなった
- 10. タグ振り分け機能の実装
- 11. ECSコンテナに接続する方法
- 12. SIerエンジニアからWeb系フロントエンドエンジニアに転身するために今やっていること
- 13. 【CircleCI】Rails × PostgreSQL環境作ってHerokuにデプロイする最低限のCIとその解説
- 14. git コマンド一覧
- 15. Railsの機能をcronから実行する
- 16. Rails ページネーション
- 17. ActiveRecordでデータを月毎に集計
- 18. 【Rails】parent_idとchild_idを持つ中間テーブルを作って親子関係を実装する
- 19. 【Rails】mark_for_destruction を 使って特定の条件のレコードを削除する。
- 20. 新規投稿機能を作成した際にNoMethodError【Ruby on Rails】
deviseの導入の仕方
##手順
1. Gemfileに最下部に`gem ‘devise’`と記述する
2. `bundle install`する
3. `rails g devise:install`する
4. モデルを作成するために`rails g devise user`を実行する
5. ビューファイルを設置するために`rails g devise:views`を実行する2~5はターミナルで操作します。
「ログアウトしますか?」の確認メッセージを表示させたい
##こんな人に向けて
1.Railsでアプリケーションを作成している人。2.ログアウトや投稿の際に出てくる
「ログアウトしますか?」ーーー「OK」・「キャンセル」
のようなメッセージを実装したい人。##方法
JSの知識がなくてもRailsだと簡単にできます。“`ruby:top.html.erb
<%=link_to "logout", destroy_user_session_path, class:"li nav-link text-dark",method: :delete, data:{confirm:" [確認] ログアウトしますか?"}%>
“`大事なのは最後の部分。
“`ruby
data:{confirm: ” [確認] ログアウトしますか?”}
“`
![dsBuffer1.bmp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/917944/397a471f-437a-8316-37c0-5cbe834026e9.png)“`ruby
data
Rails 504 time outエラー対応
# 概要
rails, puma, nginxで構築した環境で504 time outエラーが発生した時に対応したことについてまとめます。
状況としてはpumaとnginxが起動状態で、DBにアクセスする前に504エラーが表示されていたので処理に時間がかかっていることが原因ではないという想定で原因調査をしました。# 環境
rails:5.3.4
puma:3.12.4
nginx:1.19.1# 原因
デプロイ時にconfigで定義しているcredentials.yml.encファイルの中身が書き換わってしまうことが原因でした。# 解決方法
書き換わったファイルを別の名前にリネームして、以下のコマンドを実行“`
export SECRET_KEY_BASE=`bundle exec rake secret`
“`
このコマンドを実行することで新しくcredentials.yml.encが作成され、time outエラーは解消されました。# まとめ
504 time outエラー時に対応したことについてまとめました。
【Rails devise】deviseの導入と追加するカラムの許可
## devise導入の手順
##### Gemfileで`gem ‘devise’`と追加し、`bundle install`としてdeviseのgemを導入
##### まだdeviseが使えない状態なので、ターミナルでインストールする
“`
$ rails g devise:install
“`##### userモデルの生成
$ rails g devise user
##### ビュー画面のカスタマイズをする場合
“`
$ rails g devise:views
“`##### controllerを使ってカスタマイズしたい場合
usersコントローラーの作成“`
$ rails generate devise:controllers users
“`
## deviseの便利なメソッド
#### ログインの有無
`user_signed_in?`
#### ログイン中のユーザー
`current_user`
#### ログインユーザーのみ許可するメソッド“`ruby
be
Slack API の始め方をまとめました
# Slack API の始め方をまとめました
## 目次
– SlackにAppを登録
– Slack App を作成
– Slack API を利用してメッセージを投稿する。※ rubyを使用します
## SlackにAppを登録
ブラウザで次のページよりSlack APIにログインする。
https://slack.com/signin### 開発用のワークスペースを作成
ログインを終えたら次のページより開発テスト用のワークスペースを作成する.
![create_workspace.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366451/b6b67064-0f74-7f4d-288a-549e30587b1f.png)
まずは、`+ Create a New Workspace` をクリック。![workspace_setup_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/366451/12
RSpecを実行すると、 Lock wait timeout exceeded; try restarting transaction mysqlというエラーがでる
ある日、RSpecのテストの実行中に、Ctrl+Cでキャンセルし、再びテストを走らせた。すると、いつまでたっても処理が止まったままだったのでそのまま放置していたら以下のようなエラーが出ました。
“`
Lock wait timeout exceeded; try restarting transaction mysql
“`# なぜこうなったのか
おそらく、MySQLのトランザクション(システムスペックは自動でテストデータのトランザクション処理をしてくれる)がコミットされる前にCtrl+Cでキャンセルしてしまったからだと思いますが、はっきりした原因は不明です(超ピンポイントでCtrl+Cを押してしまったため発生した?)# 解決策
①mysqlに“`mysql -u root -p“` でログインする。
②“`SHOW ENGINE INNODB STATUS“`を実行し、**TRANSACTIONS**の部分を確認する。“`
TRANSACTIONS
————
Trx id counter 60949
Purge done for trx’s
Railsで、現在時刻・日時を表示させる方法
#はじめに
Rubyでは標準ライブラリなど、様々なものがあるが、その中で、日付についてのものがあり、現在制作中のアプリに日付を表示させようと思い、ここにいたる。##Rubyでは…
“`ruby
require ‘date’
“`
を記述することで、そのライブラリを使用できる。##Railsでは…
調べが足りないので、定かではないが、デフォルトで使用できるみたい。私は、上記の記述を書いた覚えがないが、日時を表示できた。###現在の時刻
“`ruby
Time.now
#=>2020-11-28 23:33:32 +0900
“`###今日の日付
“`ruby
Date.today
#=>2020-11-28
“`##最後に
どこの記述されているのか、わからないが使える機能がたくさん出てきた。Railsは便利だが、ブラックボックスな部分が私にはまだまだあり、難しい。開いたことのないファイルがたくさんある…
表示方法を変えたいなぁ…`ja.yml`あたりをいじればいいのかなぁ…
【Rails】form_withの使い分け
#はじめに
はじめまして。元ものづくりエンジニアのまついです。独学でRailsを勉強している初学者です。
私と同じようなRails初学者の方でもわかりやすいように、そして私自身の備忘録として記事をアウトプットしていきたいと思います。#もくじ
1. form_withとは? form_tag, form_forとの違いは?
2. form_withの使い方
3. URL指定の場合
4. モデル指定の場合
5. まとめ#1. form_withとは? form_tag, form_forとの違いは?
まずform_with、form_tag、form_forヘルパーとは__Railsで使用されるフォームを生成するヘルパーのことです。__ヘルパーとはRails内であらかじめ用意されたメソッドのことです。特にform_withはRailsアプリのviewを作成するときに必ずと言っていいほどでてきます。
ではこれら3つのヘルパーの違いは?というと、– __form_tagはモデルと関係しないフォームの生成。__
– __form_forはモデルのオブジェクトなどに送信
[rails]突然自動デプロイが反映されなくなった
#何が起きたのか
よくわかりませんが、調べたところEC2に問題があった
自動デプロイしてたら突然変更が反映されなくなった#解決方法
よくわかりませんが突如起こった出来事ですので
とりあえずAWSのマネジメントコンソールにログインしてEC2インスタンスを再起動
再起動後は以下のコマンドでNginxとdbを起動。“`
$ sudo service nginx start
$ sudo systemctl restart mariadb“`
その後 自動デプロイする 完 (勝手にunicornは起動されるであろう )
“`
bundle exec cap production deploy
“`#補足
###EC2に問題がある場合の確認すべきところ基本的に以下のどれかがどうにかこうにかなっていることが多い説
( unicorn,db,nginx…)なのでエラーログみてもよくわからなかったらコマンドでいろいろ確認してみよう
“`
データーベースの状態を確認
sudo systemctl status mariadb
“`
タグ振り分け機能の実装
# はじめに
今回は、zipang(漢字、ひらがな、カタカナをローマ字に変換するもの)というgemを用いてタグを頭文字ごとに0~9、A~Zに振り分けて索引のようなものになるよう実装いたしました。その際、予め ancestry を用いて親カテゴリーとして0~9、A~Zをデータに保存するseedを作成しております。
# 機能の実行順序
大まかな流れといたしましては、
#### ① タグを入力する
#### ② 入力されたタグをzipangでローマ字に変換
#### ③ 変換した文字の頭文字を取得し、その頭文字を親としてタグをその子要素に保存する。(タグのテーブルにはancestryを用いているので、知らない方は検索してみてください)
####
ECSコンテナに接続する方法
#意外と忘れるコンテナ接続
本番環境のコンテナに入ってDB操作したりデバッグしたり…久しぶりにやろうとしたらど忘れしていたのでこの記事を書くに至りました。
#接続までの手順
– セキュリティーグループの**インバウンドルール**変更
– EC2インスタンスの**Public IP** / **Public DNS**を確認
– “`ssh -i /path/to/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com“`コマンドでECSコンテナにssh接続#それでは始めます
##インバウンドルールの変更“`EC2“` > “`セキュリティーグループ“` > “`該当のセキュリティーグループ“` > “`インバウンドルールを編集“`
“`ssh“`タイプの“`ソース“`を「 マイIP 」に変更する
この変更をしていないと後でssh接続したとき以下のエラーが出るため必要な手順です
“`
ssh: connect to host [自分のPublic IP]
SIerエンジニアからWeb系フロントエンドエンジニアに転身するために今やっていること
こんにちは!SIerでJavaプログラマをしているゆうきデザイン([@yuki_design_gr](https://twitter.com/yuki_design_gr “Twitter”))と言います。
Qiita初投稿として、自己紹介も兼ねて
**”SIerエンジニアからWeb系フロントエンドエンジニアに転身するために今やっていること”**
というテーマで書いてみようと思います。**同じような境遇にいる人の道しるべの1つになりますように!**
#目次
[1. 自己紹介](#1-自己紹介)
[2. なぜWeb系を目指すのか](#2-なぜweb系を目指すのか)
[3. SIerエンジニアからWeb系フロントエンドエンジニアに転身するために今やっていること](#3-sierエンジニアからweb系フロントエンドエンジニアに転身するために今やっていること)#1. 自己紹介
東京在住の20代半ば。
####学歴
東京外大韓国語専攻卒業####職歴
新卒で大手SIerに入社し、アカウント営業を担当(10ヶ月)
→SE(現職。Java・.NET・Oracleのコーディング実務1年
【CircleCI】Rails × PostgreSQL環境作ってHerokuにデプロイする最低限のCIとその解説
最近、CIの勉強をするにあたって「[CircleCI実践入門──CI/CDがもたらす開発速度と品質の両立](https://www.amazon.co.jp/dp/4297114119/)」という本を読んでCIの勉強をし直しました。
その整理でRailsでテストやデプロイをするCIを作りました。
その中で学んだ知識とか書いていきます。## 環境
– Ruby On Rails6系
– Ruby 2.6.5
– PostgreSQL 11.5
– Bundler 1.17.3
– CircleCI 2.1## 準備
1. https://circleci.com/ から CircleCIに登録
2. .circleciディレクトリ配下にconfig.ymlを置く“`bash
$ mkdir .circleci
$ touch .circleci/config.yml
“`
3.config/database.ymlに環境変数を使う設定を書く“`yaml
test:
<<: *default database
git コマンド一覧
#はじめに
スタートアップの自社開発系企業への転職を目指して、スクールに絶賛通い中のRyutaroです!
ひとまずRailsチュートリアルを1周したので、より自分の知識を定着させるために、これからはアウトプットをしていきたいと思います!今回は第1回目なので、簡単なまとめです(笑):point_up:gitのコマンドをまとめました。チュートリアルでよく使ったので、大体の意味は理解してるつもりですが、復習の意味も込めて整理したいと思います:runner_tone2:
##git add
“`ruby:qiita.rb
git add -A
“`-Aで今のディレクトリ全部を待機用のリポジトリに置かれ、コミットを待つ状態になるそうです。
ちなみに今、何をaddされてるのか確認するには、
“`ruby:qiita.rb
git status
“`を使用。待機用のリポジトリに置かれてないのは、赤。置かれたら緑で全て表示されます。
##git commit
“`ruby:qiita.rb
git commit -m “xx”
“`git
Railsの機能をcronから実行する
この記事は、Railsの機能をcronから実行する方法について解説しています。
Railsの機能をcronから実行する方法はいくつかありますが、単純に実装してしまうと、サーバーのリソースを無駄に消費し、実行完了までとても時間のかかるものになってしまいます。
ある程度アクセスのあるサービスを運営している場合は、上記のリソースの無駄使いを防ぐために、Railsの機能をcronから実行するときに少し工夫が必要になります。
最終的な完成形は、「バックグラウンドジョブとして実装し、起動しているRailsサーバーからジョブをキューイングする」というものになります。順を追って解説していきます。
## 既存の方法の何が問題なのか
既存のよくある方法は、cronからRailsサーバーを起動するものがほとんどです。この方法だと、Railsサーバーの起動に10秒ほど時間がかかります。時間だけでなく、100MBほどのメモリが消費されます。規模が大きい場合はもっとたくさんの時間とメモリが必要になります。
cronから毎分実行する場合は、このリソースの無駄使いを避けたいところです。cronから呼
Rails ページネーション
# はじめに
今回はrailsでのページネーションを実装していきます。kaminariというページネーション用のgemを使って実装していきます。
簡単に実装できるので一緒にやっていきましょう!#kaminariのインストール
Gemfileに`gem ‘kaminari’`を追加し、`$ bundle install`でインストールします。
“`Gemfile
# 最後の行に追加
gem ‘kaminari’
“``$ bundle install`
これでkaminariをインストールすることができました。
#ページネーションを表示させる
controllerで、ページネーションを表示させたいデータに`.page(params[:page])`を追加します。“`app/controllers/notes_controller.rb
def index
@q = Note.all.ransack(params[:q])
# ページネーションをつけたいデータに.page(params[:page])を追加
@notes = @q.r
ActiveRecordでデータを月毎に集計
# [ActiveRecord]でデータを月毎に集計する方法
今回は入力した数値を月毎に集計して合計値を出力させる方法を投稿します。
ネットで検索しても、なかなか良い方法がなかったので、参考になればと思います。使用テーブル(incomesテーブル)↓↓↓
![スクリーンショット 2020-11-28 14.03.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/875779/39a01ec9-c7a1-7e47-b5a6-841b687fec82.png)
このテーブルから2019年-月分・・・2020年-月分としたいと思います。
実行コード↓↓↓“`ruby
Income.group(“YEAR(fill_date)”).group(“MONTH(fill_date)”).sum(:price)
“`
YEAR(fill_date)で年毎にグルーピングして、さらにMONTH(fill_date)で月毎にグルーピングした後、sum(:カラム名)でpriceを合計しています。
このときのタ
【Rails】parent_idとchild_idを持つ中間テーブルを作って親子関係を実装する
# はじめに
階層構造を持つモデルを実装することがあったのでその時のメモ書きです。
例として**部署**を考えます、以下の画像のようなイメージですね。
( ※ 適当に拾ってきました。)
![admn0035.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559794/162309e9-fabe-2e1f-9204-1e9b0d974d35.gif)
テーブルは departments と department_pathsの二つを用意します。
|departments | |
|:———–|:——|
|id |integer|
|name |string ||department_paths | |
|:———–|:——|
|id |integer|
|parent_id |string |
|child_id |string |## association の実
【Rails】mark_for_destruction を 使って特定の条件のレコードを削除する。
# 使用ケース
「特定のカラムが空である場合にはそのレコードを削除したい」みたいなときに便利です。
そのレコードに削除マークをつけておくと削除されるイメージで実装できます。# サンプルコード
前提として users は name カラムを持つとします。
name の値が nil か 空文字であればそのレコードを削除したいみたいな時は、以下のように実装できると思います。
今回はインスタンスメソッドを定義し、before_validationのコールバックで実行しました。
~~~app/models/user.rb
before_validation :delete_user_if_name_blank
def delete_user_if_name_blank
self.mark_for_destruction if name.blank?
end
~~~if 文を使えば色んな条件で適用できますし、アソシエーションしているレコードも削除できたりするので色々と応用が効きそうですね。
新規投稿機能を作成した際にNoMethodError【Ruby on Rails】
Railsで一般的な新規投稿機能を作成した際にNoMethodErrorが発生した。
#原因一口にノーメソッドエラーと言っても原因は色々考えられる。
私の場合は、UserモデルとPostモデルの間で1対多の関連付けをしていたのだが、app/model/User.rbに
has many :posts
を記述していない事が原因だった。
#教訓
判明してみると、なんでこんなミスをしたのだろうと思ってしまうような凡ミスではあるが、
ノーメソッドエラー
→メソッドが定義されていない
→メソッドを一生懸命確認するという安易な発想で、原因にたどり着くまでに30分くらい費やしてしまった。
エラー画面の情報はあてにならない(この言い方は大いに語弊があるかもしれないが)場合が多々あるため、周辺情報も含めて行うべき設定は正しく行っているか確認するように心がけたい。