Ruby関連のことを調べてみた2022年07月11日

Ruby関連のことを調べてみた2022年07月11日
目次

rollbackできないエラーの時

rollbackをしようと実装していた矢先、以下のようなエラーが出て、少しはまってしまったため、その備忘録を書かせて頂きます。
“`
ActiveRecord::UnknownMigrationVersionError:
No migration with version number 20220703020507.
“`

このエラーはどう言う時に出るかというと、下記の表で上から三行目に
[********** NO FILE **********]と書かれてるように、NO FILEがあると、うまくrollbackができなくなってしまいます。
“`
database: starbuck_services2_development

Status Migration ID Migration Name
————————————————–
up 20220702022539 Sorcery core
up 20220702115611 Add role to users

元記事を表示

Claris ConnectでEコマースの在庫連携システムを作成する

# はじめに

この記事は、Qiita Engineer Festa 2022 「**[Claris Connect を使った SaaS 連携ユースケースを紹介しよう!](https://qiita.com/official-events/eeadea1de45a11be944e)**」に参加するために作成した記事です。

在庫連携システムを作成しますが、
実運用に使用できるほど仕様を考えていないので軽い気持ちで見ていただけると幸いです
また、Claris ConnectのIDや本記事で使用する各種サービスの登録方法は省略させて頂きます

# 概要

今回は複数のECを運用する事で必要になる「在庫連携システム」をClaris Connectを使って構築します
実際に運用する事をイメージして複数システムのデータ連携からSlack・Trelloのサービス連携まで行います

# 在庫連携システムとは

実装に移る前に在庫連携システムについて説明します

まずこちらが在庫連携を使用せずに複数のECサイトを運用している図になります
商品在庫を同期していないのでそれぞれのECサイトに在庫を振り分け

元記事を表示

100日後くらいに個人開発するぞ!day053

## 今日はクラスとインスタンスの復習をしてみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/cdacd228-7f7c-d737-1530-18692e665420.png)

## 今日の備忘録
### クラス
* プログラムの設計図をクラス、生成されるものをインスタンスという
* インスタンスを生成するステップ
* クラス(設計図)を用意する
* クラスからインスタンスを生成する
* インスタンスに情報を追加する
* クラスは「class クラス名」で定義できる
* クラス名は必ず大文字で始める
* 「end」を書く必要がある

### インスタンス変数
* クラスのインスタンスの変数をインスタンス変数という
* 例:Menuクラスにnameというインスタンス変数を設定する場合
* `class Menu`
* ` attr_accessor :name`
*

元記事を表示

Rails エラー「Runtime Error Your version of SQLite (3.7.17) is too old. Active Record supports SQLite >= 3.8」の対処法

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 目次
– エラー全文
– 対処法

## エラー全文
アプリケーション作成後、`@rails s`でアプリケーションを起動。
サイトアクセス時、に下記エラーが発生。

![rails1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730324/74534efa-3a59-2d31-5c3c-3c47a9ce501e.png)

AmazonLinux2にはsqlite3のバージョン3.7がデフォルトでインストールされており、
これがyumで利用しているらしく、削除することはできません。
しかし、Rails6を動かすにはsqlite3のバージョン3.8以上が必要なので、
バージョンが古い!とエラーが出ている、、、というわけです。

## 対処法

既存のSQLiteはそのままで、3.8以上のSQLiteを別途インストールします。
sqliteの最新バージョンは[こちら](https://www.sqlite.org/download.

元記事を表示

Rails7で画像の保存にActiveStorage使ってみよう(導入からリサイズまで)

## はじめに

Ruby on Railsには、クラウドストレージサービスへのファイルのアップロードを行う機能を提供するActive Storageがあります。

Rails5.2から登場したActive Storageですが、当初はできることが少なく、CarrierWaveを利用する方も多かったのではないでしょうか。
Rails7まででActive Storageには様々な機能が追加され、新規開発の際はActive Storageを選択することが多くなると思います。

今回はActive Storageの導入からよく使うであろう画像のリサイズの方法までをご紹介します。

ViewやControllerまわりについては説明していないので[Railsガイド](https://railsguides.jp/active_storage_overview.html)などで確認してください。

## 開発環境

[こちらの記事](https://qiita.com/croquette0212/items/7b99d9339fd773ddf20b)を参考にRails7 + MySQLの開発環境

元記事を表示

Ruby初心者向けのVSCodeでの環境構築+実行環境構築+ショートカットキー紹介

プロを目指す人のためのRuby入門に書かれているエディタの環境構築をVSCode上で行いました。
この記事を最後まで読むことで、プロを目指す人のためのRuby入門に書かれている以下の環境構築をVSCode上で行えるようになります。
また、書籍内に書かれていたのおすすめ機能に加えてVSCode上でRubyを実行する設定も行います。
これによって簡単にVSCode上でRubyの実行ができるようになります。

>1.シンタックスハイライトを設定する
2.複数行の一括コメントアウト、コメント解除
3.矩形選択・矩形編集
4.タブキーによるインデント幅の設定
5.endキーワードの自動入力、自動インデント
6.複数ファイルの同時編集、タブ表示
7.ウインドウの分割
8.ファイルツリーの表示
9.インデントの可視化
10.やる気の出るカラースキームや背景画像
11.全角スペースの可視化(2020.2.29追記)
12.Rubyの実行環境を構築する
※1-11に関しては著者Qiitaより抜粋しました。
https://qiita.com/jnchito/items/0ad568263f341977

元記事を表示

Ruby on Railsをローカルで始めようとしてつまずいたこと(Windows)

# 概要
railsを触ろうと思ってWindowsでHelloWorld的なところをやろうとしたら、エラーが出てしまったのでその対応の備忘録。

## バージョン
* ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x64-mingw32]
* Rails 7.0.3
* Windows 10 Home

## エラー内容

`Windows PowerShell`でコマンド実行。
アプリケーションを作る際にエラー。

`$ rails new rails_practice`

エラーログ
“`
create
create README.md
create Rakefile
create .ruby-version
create config.ru
create .gitignore
create .gitattributes
create Gemfile
run git init from .
C:/Rub

元記事を表示

【Rails】Rails6 + docker メール設定エラー 「Errno::EADDRNOTAVAIL (Cannot assign requested address – connect(2) for “localhost” port 1025)」

## 概要
Rails6とdocker環境でメール設定をした際に発生したエラーの備忘録です。

### 環境
– ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux]
– Rails 6.1.6
“`docker-compose.yml
# 中略
mailcatcher:
image: schickling/mailcatcher
ports:
– 1080:1080
– 1025:1025
“`

## エラー発生時のメール設定
“`development.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: ‘localhost’, port: 1025 }
config.action_mailer.raise_delivery_errors = true
“`

### エラー内容
– Railsサーバ側

元記事を表示

クラス外からインスタンス変数を呼び出す際に簡単に使えるメソッド

Rubyのクラスメソッドに属性としてinitializeメソッドで定義したインスタンス変数の値を外部から呼び出す際に利用できるattr_readerメソッドの使い方について記述していきます。

例として各支店の店舗名と売上の入力している値を外部から呼び出し、売上の合計をクラスメソッドで呼び出し、出力する場合

メソッドで定義して呼び出す場合
“`
class Shop
@@total_sales = 0

def self.salesAll
@@total_sales
end

def initialize(shop_name,sales)
@shop_name = shop_name
@sales = sales
@@total_sales += @sales
end

def shopName
@shop_name
end

def sales
@sales
end
end

shop1 = Shop.new(“東京”, 500000)
shop2 = Shop.new(“大阪”, 400000

元記事を表示

クラスとインスタンスとオブジェクト

## 概要

概念的で抽象的な物が苦手なので、これを機にまとめようと思います
説明するのはRubyですけど、どの言語において共通して使える考え方だと思います

### オブジェクトとは
そもそもオブジェクトとはなんだろう
Rubyの世界は全てのものがオブジェクトになります
配列ハッシュ以外にもnilもオブジェクトに当たります
つまり全部オブジェクトです
ただ抽象的すぎて分からないですよね
なのでたこ焼きで考えましょう
たこ焼きは紅生姜や青さ、鰹節、マヨネーズ、油、たこ、たこ焼き粉などの材料から作られています
つまりこれら全部がオブジェクトになります

### クラスとは
次にクラスとはどのようなものでしょうか?
こちらはオブジェクトを作るための設計書になります
簡単に示すと型です
こちらもたこ焼きで表すと分かりやすいです
1個ずつたこ焼きを作っていたらお客さんが怒ってしまいますので、一気にたくさん作りたいと思ったたこ焼き屋さんの店長さんはたこ焼き器を作りました
こうすることで一気に焼けてお客様を待たせることなく提供できます
またたこ焼き器を作ったことで、具材にチョコを入れたデザートたこ

元記事を表示

Rubyのハッシュのキーについて

私はJavaScript歴4年のところから、最近になってRubyを書き始めたのですが、[こちらの記事](https://qiita.com/beeytnh/items/b2bef53b680cb3741a80)に関連して、JavaScriptでは `{}` の定義において以下のサンプルの両者の違いをあまり意識しなくてもそこまで問題にはならないと分かったのですが、Rubyだとまた違った記法があり、各々の違いを全然理解できていなかったので改めて調べてみました。

“`jsx
const sample1 = {
id: 1,
name: “name”
};
const sample2 = {
“id”: 2,
“name”: “name”
};
“`

まず、上記サンプルをRubyで定義すると以下のようになります。

“`ruby
sample1 = {
id: 1,
name: ‘name’
}
sample2 = {
‘id’: 1,
‘name’: ‘name’
}
“`

この場合、sample1とsample2に違いはなくキーはSymbolと

元記事を表示

twitterAPIで自動ツイートをしたい

### APIキーを取得
[やり方](https://di-acc2.com/system/rpa/9688/)
callback url は `http://127.0.0.1:3000/oauth/callback`
### gem
公式の[developer platform](https://developer.twitter.com/en/docs/twitter-api/tools-and-libraries/v2)に[sample code](https://github.com/twitterdev/Twitter-API-v2-sample-code)があったのでそれに則っていく
“`
gem install typhoeus
“`
httpクライアントとして使用
“`
gem install oauth
“`
APIキーの認証に使う
“`
gem install dotenv
“`
今回自分はDockerを使用したので、環境変数を渡すのに便利な’dotenv’も使用しました

### コーディング
ファイルの作成
“`
touch tweet.rb
`

元記事を表示

テックキャンプ受講した感想

【カウンセリングについて】
最初は不安でカウンセリングを申し込んだのですが、担当の方が優しく対応してくださり質問にも納得するまでお答えしてくださったので安心して入学を決めることができました。
メルカリのようなアプリを作れるようになりますよと言ってくださり、前向きに考えることができました。
受講から2週間以内であれば返金制度もあると聞いたのでまずは試してみようという気持ちで始められました。

【料金について】
受講料がかかることがネックでしたが給付金が対応しているスクールなので躊躇なく入学を決めることができました。
高いクオリティーのカリキュラムで給付金の対応がされているのでかなりお得感がありました。
給付金の申請自体も初めてでしたが、全く難しくなくスムーズにできました。
給付金に関してはライフコーチが何度もZOOMでわかりやすく説明してくださったので遅れや漏れがなくきちんと適用することができました。

【カリキュラムについて】
パソコンの操作さえもあまりできない自分のような初心者でもわかりやすく学習することができました。
MacBookを買ったばかりで使い方もわからなかったのですがカリ

元記事を表示

gzip 圧縮したファイルを cat で繋ぐと、Ruby では読めないよ

「gzip 圧縮したファイルは cat で繋ぐことができる」という話を聞いていて、 gzip の凄さに感動していたのだけれど、 Ruby を使って読もうとしたら駄目だったので、残念だった。

`cat` で繋いだファイルと、 `gzcat+gzip` で繋いだファイルを用意する。

“`sh
$ echo ‘aaa’ | gzip > aaa.gz
$ echo ‘bbb’ | gzip > bbb.gz
$ cat aaa.gz bbb.gz > cat.gz
$ gzcat aaa.gz bbb.gz | gzip > gzcat.gz
“`

`gzcat` で読むと、結合されていることが判る。

“`sh
$ gzcat gzcat.gz
aaa
bbb
(rc->0)
$ gzcat cat.gz
aaa
bbb
“`

Ruby で読む

“`rb
[1] pry(main)> require ‘zlib’
=> false
[2] pry(main)> Zlib::GzipReader.open(‘gzcat.gz’).read
=> “aaa\nbbb\n”

元記事を表示

Resqueで処理中のジョブを中断する方法

## これはなに

Resqueで処理中のジョブを中断したいなと思って調べたのですが、キューに積まれているジョブを削除する方法しか出てこなくて困ったので記事にします。

## 方法

Resqueの親プロセスに対して`USR1`シグナルを送ることで、ジョブを走らせている子プロセスを終了させることができます。

“`
$ kill -s USR1 RESQUE_PID
“`

## 詳細

### Resqueのプロセス

Resqueはジョブごとにプロセスをforkし、forkされた子プロセスでジョブが実行されます。

> Unlike Sidekiq (a well-designed & well-maintained alternative!) it forks a new process for each job, which makes it resilient to memory leaks and eliminates thread-safety concerns.

(https://resque.github.io/ より引用)

> Forking
> On ce

元記事を表示

database “…” is being accessed by other userが出た時

rails db:resetの際に
database “…” is being accessed by other userが出た時の対処法を説明します。

PostgreSQLを再起動させたらrails db:resetは正常に実行される。
“`
macの場合
停止
brew services stop postgresql
起動
brew services start postgresql
その後
rails db:reset
“`

元記事を表示

【Rails】Sorceryで外部認証 〜Google編〜

# はじめに??
現在個人開発しているサービスにて
SorceryのExternalモジュールを利用して外部認証を実装する際に
google認証を実装している例がなかったため、備忘録も兼ねて記します。

※下記の記事にてLINE認証についても解説しています!
内容に一部重複している部分があるため、実装済みの部分に関しては都度読み飛ばしていただければと思います。

https://qiita.com/tarakish/items/a4c73104375878ad61c5

### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 sorcery `0.16.2`

### 想定読者?
– sorceryのexternalモジュールをベースとしてgoogle認証を実装したい人

### 前提?
– [Simple Password Authentication](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)でのメールアドレス認証機能は実

元記事を表示

【Rails】【SQL】子モデルの最新レコードを基準に親モデルをソートする方法

大阪でRailsを中心に学習している薬剤師エンジニア(初学者)こと、ヨマ([@yoma_2003](https://twitter.com/yoma_2003))です!
Railsで`子モデルの最新レコード`を基準に`親モデルをソート`する方法をまとめます。

※おことわり※
断定口調でまとめますが、初学者であるため間違い等あればご指摘頂けると嬉しいです。

# はじめに
Railsで次のような親子関連を持ったモデルがあったとします。

“`character.rb
class Character < Application Record has_many :topics end ``` ```topic.rb class Topic < ApplicationRecord belongs_to :character end ``` ### charactersテーブル | id | name | describe | |:--:|:----:|:----------:| | 1 | 田中 | 初学者 | | 2 | 鈴木 | Rails学習中 | |

元記事を表示

rails7でomniauthで認証しようとしたらエラーばっかりでうまくいかなかった

# 最終的にはちゃんとできました。
他の言語にうつつを抜かしている間にRubyは3出てるし、railsは7系出てるしでまさに青天の霹靂。
ホスティングする環境によって最近使ってるdotnetをあまり使いたくなかったので、久々にrails触った。

# やりたいこと
ユーザー認証まわりはCognitoにおまかせして、さっと作りたかった。

## 参考にさせていただきました
こちら
https://qiita.com/yhirano55/items/272125c3ce3d7873002e
ありがとうございます。

## ですが動かない

### 最初は「OmniAuth::AuthenticityError Forbidden」が出る
![スクリーンショット 2022-07-07 22.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120789/7ca80e2f-48e9-6e64-c133-6871387d0779.png)
これですね。
これは
`gem ‘omniauth-rails_c

元記事を表示

Rubyで平衡二分探索木を実装(AA木)

競プロで必要になったときのため & アルゴリズムの勉強のため。

平衡二分探索木(self-balancing binary search tree)を調べたらいくつか出てきたが、基礎的な考え方をしていて且つ場合分けが少ない(と感じた)**AA木**を選ぶことにした。[Wikipediaの記事](https://ja.wikipedia.org/wiki/AA木)にあった説明にほぼ沿って実装した。

※ ちなみに勉強前は、ふつうの二分探索木すらきちんと知らなかった。

## 実装

* 既に存在している値を挿入した際は、別のノードを作って記憶するようにした。
* コード末尾には簡単なテスト(デバッグおよび性能測定)を付けた。

“`ruby:aa_tree.rb
class AATree
class Node
attr_accessor :left, :right, :value, :level

def initialize(value)
@value = value
@level = 1
end

def inspect
[@left, @va

元記事を表示

OTHERカテゴリの最新記事