Rails関連のことを調べてみた2022年05月30日

Rails関連のことを調べてみた2022年05月30日
目次

Docker compose 立ち上げようとしたら All connections are blacklisted -> No error details

## 前提
– docker-compose で rails と mysql、その他諸々を立ち上げようとしている
– コンテナ名は rails -> app, mysql -> mysql
– アプリケーションサーバーの depends_on に mysql を設定
– アダプタは Makara 使用

## 何が起きたか
`docker-compose up` で立ち上げようとしたらアプリケーションサーバーが立ち上がらず以下のエラーが。。。
“`
ERROR — : [Makara] Harshly handling: [Makara/master] All connections are blacklisted -> No error details
“`

## 原因
MySQL 起動中にもエラーが出ていた。
“`
ERROR — : [Makara] Gracefully handling: [Makara/write] Can’t connect to MySQL server on ‘mysql’ (115)
“`

MySQL 起動中に接続を試みて失敗して

元記事を表示

RailsAPI+Reactでnpmの階層を間違えて沼った話

# ブラウザのコンソールに以下のエラーが出た
“`
Error: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.
“`

1と2には該当していなかったので、3に当たりをつけて“npm l

元記事を表示

Herokuにdockerコンテナアプリをデプロイする

## 対象読者
– ローカル環境もしくは別のサーバー上にすでにコンテナアプリを開発済みの方
– コンテナ上で開発したアプリをHerokuにデプロイしようと考えている方

## 筆者の環境
– Rails(API)
– React
– MySQL
– docker

rails,reactはそれぞれ別のコンテナとして開発を行った.

## Herokuに登録する
Herokuに会員登録をおこなう.(長くなってしまうのでここでは省略)
後で無料のアドオンを追加する際に必要となるのでクレジットカードの登録も合わせて行う.

## HerokuCLIをインストールする
コマンドでHerokuの操作を行うため以下の手順でHerokuCLIのインストールを行いましょう
– 以下のサイトにアクセスしてHerokuCLIのダウンロードを行う
https://devcenter.heroku.com/ja/articles/heroku-cli#install-the-heroku-cli
– コンテナアプリの置いてあるディレクトリに移る
例:cd Documents/docker/rails-reac

元記事を表示

undefined method `mechanism=’ for ActiveSupport::Dependencies:Moduleを解決した話。(Mac rails consoleが起動できない編)

# 環境
OS: Mac
SHELL: zsh
rails: 7.0.3

# undefined method `mechanism=’ …が出た!
rails consoleを立ち上げようとしたら、掲題のエラーが発生した。

https://stackoverflow.com/questions/70849954/undefined-method-mechanism-for-activesupportdependenciesmodule-nomethoder

上記の記事にならって、下記のgemを削除する。’spring’gemは元々入れていたためそのまま。
“`
gem ‘spring-watcher-listen’   # 削除
“`

# 解決した
再びrails consoleを立ち上げる。
“`
$ rails c
Running via Spring preloader in process 45130
Loading development environment (Rails 7.0.3)
irb(main):001:0>
“`
立った。。。。!
どう

元記事を表示

find_byをモック化しようとしてはまった話

# find_byをモック化しようとしてdoes not implement
RSpecでfind_byをモック化したく、allow_any_instance_ofでモック化しようとするとUser does not implementエラー
“`ruby:spec
allow_any_instance_of(User).to receive(:find_by)
“`

“`shell:実行結果
Failure/Error: allow_any_instance_of(User).to receive(:find_by).and_return(nil)
User does not implement #find_by
“`

考えてみれば当たり前で、find_byはUserクラスのインスタンスに属するものではなくクラスに属するものなので、
“`ruby:spec
allow(User).to receive(:find_by)
“`
と書けばOK。

元記事を表示

Rails APIでFirebase認証を行う

# 概要
[firebase-auth-rails](https://github.com/penguinwokrs/firebase-auth-rails)というgemを使い、rails/apiモードでfirebase認証をセットアップする時の流れについてです。
Dockerで開発環境を作っています。

# Docker側

“`
(api部分)
environment:
REDIS_URL: redis://redis:6379/0
“`

“`
redis:
image: redis
ports:
– 6379:6379
volumes:
– “./app/redis:/data”
“`

# rails側
“`
gem ‘firebase-auth-rails’
“`

“`
bundle install
“`

“`config/initializers/firebase_auth_initializer.rb
FirebaseIdToken.configure do |config|
config

元記事を表示

【Rails】カラム名と異なるアソシエーションを設定する(belongs_to等のforeign_keyオプション)

## はじめに
STIであるモデルが絡んだ場合など、たまにタイトルのようにカラム名と異なるアソシエーションを設定したくなる場合がある。その方法について記録する。

## 結論
例えば、`ユーザ(User)一人一人に対し、複数の著書(Book)が属している`ような場合に、`その著書(Book)から、ユーザ(User)を取得する関連を「author(著者)」`としたい場合には、

“`
class User < ApplicationRecord has_many :books end ``` ``` class Book < ApplicationRecord belongs_to :author, class_name: "User", foreign_key: "user_id" end ``` と、`foreign_key: "user_id"`でカラム名を指定する。 ### 詳細 `foreign_key`でカラム名を指定しない場合、デフォルトではアソシエーション名に`_id`が追加されたカラムが参照される。 今回の例だと、Bookテーブルの`author_

元記事を表示

Railsにjavascriptを導入する

### javascriptを導入
RailsではWebアプリケーション開発が可能です。私も自身でポートフォリオを作りましたが、どうにも寂しい印象がぬぐえませんでした。というのも普段利用しているサービスを見ると、要素に動き、つまりアニメーションがあるものが多いです。マウスを合わせることでイラストが動いたり、文字が下から上からスライドして現れたりといったような感じです。
今のポートフォリオはページをリンクでただつなげたようなものなので、改善したい。
そこで扱うのがjavascriptです。これをRailsに導入します。
まずは、ファイルの作成。importでよびだすためです。
`script.js`ファイルを作成します。それをapp/javascript/packs/application.jsに記述しましょう。
“`
import Rails from “@rails/ujs”
import Turbolinks from “turbolinks”
import * as ActiveStorage from “@rails/activestorage”
import “channe

元記事を表示

【Rails】学生エンジニアの個人開発日記#01

自己紹介

はじめまして、こっしーです!!

これから初めてWebアプリを開発していくので、その進捗や得られた学びなどを記録していきます。

文章を書くスピードが遅いので、不定期な投稿になると思いますが、よろしくお願いします。

プログラミングへの興味・経験

大学入学当初からプログラミングに興味を持っていました。

大学1年生のときは、Pytonで簡単な処理を実行できるプログラムを書いて楽しんでいたり、大学2年生の時には、自身が所属する大学の大学祭のHP(現在は非公開)を作成していたりする時期がありました。

本格的かつ継続的にプログラミングを学び始めたのは、2022年の2月からになります。

学習を始めた最初の2か月は、Progateで学習をすすめ、Javascript、Ruby、Ruby on Rails、コマンドラインなどのコースを2周ほどしました。

現在は『Railsチュートリアル』で学習を継続しながら、作りたいサービスのコンセプトを固めたり、画面設計

元記事を表示

scopeとクラスメソッドの戻り値の違い

「とある条件に見合う最初のデータを取ってきたい」としたときにクラスメソッドとscopeでは戻り値に違いがある。ということがわかったので今後の使い分けの参考に。

## そのときやりたかったこと

ページに単純な定型文を表示させる機能を作った時のこと。条件としては、

– 本文がある(これを表示させる)
– 公開状況をON・OFFしてONのものを表示させる
– 公開状況がONであるデータが複数あったときにも一つだけが表示されるよう更新日時が一番新しいものを表示させるようにする

というもの。

それをページに表示させるため複数のデータの中から条件に合うデータを一つだけ持ってくるコードをそのモデルの中に書くことに。view側は単純で

“`ruby
– if @announcement.present?
= @anouncement.body
“`

とし、そのデータがあるようであれば表示するという条件のみ。

## scopeを使う

まず最初に使ったのがscope。書き方としては、

“`ruby
scope :published_latest, -> { where(pub

元記事を表示

An account already exists with the same email address but different sign-in credentials.

# 背景
Google firebaseのSNS認証で、同じemailアドレスを登録しているプロバイダで認証したところ
(例えば、FacebookアカウントとGoogleアカウントのメールアドレスが同じ場合など)

An account already exists with the same email address but different sign-in credentials…
のエラーメッセージと共にログインできなくなってしまいました…💦

# 改善策

Google Firebase様の公式ドキュメントの通りにjavascriptを書けばよさそうです!!

https://firebase.google.com/docs/auth/web/account-linking

元記事を表示

Webpacker::Manifest::MissingEntryErrorを解決した話。(Mac ローカルでrails serverの起動編)

# 環境
OS: Mac
SHELL: zsh

# Webpacker::Manifest::MissingEntryErrorが出たぞ〜!
ローカル環境で初めてrails serverを実行したら以下のエラーが発生した。
“`
ActionView::Template::Error (Webpacker can’t find application.js in /Users/hogehoge/environment/sample_app/public/packs/manifest.json. Possible causes:
1. You want to set webpacker.yml value of compile to true for your environment
unless you are using the `webpack -w` or the webpack-dev-server.
2. webpack has not yet re-run to reflect updates.
3. You have misconfigured Webpacke

元記事を表示

rakeタスクでテーブルを作成する

## 初めに
テーブルの不整合が発生していてmigrationでは対応しづらい時とかに使える。

## 実装
rakeタスクでmigrationのクラスを実装して呼び出せばOK。
テーブル作成以外にもカラム追加やテーブル削除など普段migrationで行なっていることは全てできる。

“`rb
namespace :hoge do
task execute: :environment do
CreateUsers.execute
end

# Migration[6.1]の[]内はアプリのRDBMSのバーションに合わせる
class CreateUsers < ActiveRecord::Migration[6.1] def self.execute create_table :users do |t| t.string :first_name, null: false t.string :last_name, null: false t.timestamps end e

元記事を表示

test時にActiveRecord::DatabaseAlreadyExists: Text file busyが発生!!

## はじめに
Ruby on Railsでアプリを開発中にテストを行うと、下記のエラーが発生しました(提案されたコマンド`db:test:load => db:test:purge`を入力しても解決せず)。

“`ruby:terminal
$ rails t
rake aborted!
ActiveRecord::DatabaseAlreadyExists: Text file busy @ apply2files – /home/vagrant/workspace/railstutorial6_sample/db/test.sqlite3
-e:1:in `

Caused by:
Errno::ETXTBSY: Text file busy @ apply2files – /home/vagrant/workspace/railstutorial6_sample/db/test.sqlite3
-e:1:in `


Tasks: TOP => db:test:load => db:test:purge
(See full trace by runni

元記事を表示

Rails 検索ツイートを直接表示させる

# 概要

ツイート検索機能に加えて検索ツイートを以下のように直接表示させる
※クリック時に該当ツイートに直接飛ぶようにする。

![取得.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294345/d7237449-a629-9c88-8c3e-131f0b0b94b6.png)

Rails5.2.8使用

# 事前準備

・Twitter APIを取得(省略)

以下などを参考にしてください

https://wporz.com/twitterapi-apikey-accesstoken/

・Gemfileに必要な記述を追加

環境変数記述用に以下を
“`
gem ‘dotenv-rails’
“`
twitterAPI使用のために以下を
“`
gem ‘twitter’
“`
“`
bundle install
“`
“`.env
TWITTER_API_KEY=取得したキーを入れてください
TWITTER_API_SECRET_KEY=取得したキーを入れてください
TWIT

元記事を表示

Unknown alias: default (Psych::BadAlias)でRailsが立ち上がらないとき

Rails6以降の立ち上げで`rails s`をしたとき

こんな感じで立ち上がらなかった
“`
hogehoge sample_app4 % rails s
=> Booting Puma
=> Rails 7.0.3 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
/Users/hogehoge/.rbenv/versions/3.1.1/lib/ruby/3.1.0/psych/visitors/to_ruby.rb:430:in `visit_Psych_Nodes_Alias’: Unknown alias: default (Psych::BadAlias)
from /Users/hogehoge/.rbenv/versions/3.1.1/lib/ruby/3.1.0/psych/visitors/visitor.rb:30:in `visit’
from /Users/hogeh

元記事を表示

文章の改行を反映してくれるsimple_format

通常、フォームのテキストエリアに文章を入力する際、改行を入れて入力したとしてもページに表示するときに何もしなければ改行が無視される。そのときに使えるのが「simple_format」という機能。
## 使い方
データを作成する際は通常どうりに改行を入れて作成すれば良い。
「simple_format」の出番は表示するとき
通常のテキストをそのまま表示する場合
“`
= @task.body
“`
と書くところ
“`
= simple_form @task.body
“`
とすればOK。これで作成時の改行が反映される。
## hオプションをつける
ユーザーが作成した文字列をそのまま表示する際は危険なscriptタグを入力され、XSSの危険があるため「hオプション」をつけて表示するのが良い。
“`
= simple_format(h(@task.body))
“`
これで危険なタグを文字列にエスケープすることができる。

元記事を表示

Tailwind CSS for RailsがDockerコンテナ内で反映されないときの対処法。purge設定に”html.erb”を含めていないことが原因

Tailwind CSS for Railsがローカルの開発環境では動いていたのに、Dockerコンテナ内で突然反映されなくなるという現象に遭遇しました。

まず、よくある原因は次の通りです。

## よくある原因
tailwind.config.jsのpurge設定が正しくない。

“`
# ディレクトリ構造(Dockerコンテナ内)
/var/www
└── myapp # Rails
├── app
│ ├── …
│ ├── …
│ └── views
├── …
├── config
│ ├── …
│ ├── tailwind.config.js
│ └── …
├── …
└── …
“`

“`myapp/config/tailwind.config.js
module.exports = {
con

元記事を表示

【Rails】APIモードでhelper_methodが使えない時の解決方法

# 今回の問題
RailsのAPIモードで個人開発をしている時にhelper_methodを使ってとあるメソッドを使いまわしたいと思ったのですが、うまくできず、苦戦しました。。
そんな時にとあるコードを書いただけで解決できたので今回はその解決方法について書いていきます!
以下の英語の記事を参考にしました。
[undefined method `helper_method’ for ApplicationController, Rails 5](https://stackoverflow.com/questions/39171741/undefined-method-helper-method-for-applicationcontroller-rails-5)

**詰まったコード**
“`Ruby
class ApplicationController < ActionController::API helper_method :login!, :current_user def login! session[:user_id] = @user.i

元記事を表示

🔰【初学者用】kaminariを使ってページネーションを実装しよう!【Ruby on Rails】

# はじめに
現在Ruby on Railsでオリジナルアプリを作成しています。
その際にGemの`kaminari`を使ってページネーションを実装しました。
ページネーションはとても簡単です!是非実装の参考にしてください!
Googleでなにかしらを検索したときに下の画像のようなページ遷移の番号がでてきますよね。これがページネーションです!
ページネーションの参考画像↓

https://gyazo.com/5039e4f4574713dc5cbdc396e3dd0332

# kaminari導入
ますはページネーションの実装を簡単にする`gem’kaminari’`を導入しましょう!
“`rails:Gemfile
gem ‘kaminari’
“`
記述を終えたらターミナルにて
“`rails:ターミナル
bundle install
“`
を行います。
# コントローラーの記述
“`rails:controller.rb
def index
@users = User.page(params[:page]).per(15)
end
“`
コントローラーの選択は

元記事を表示

OTHERカテゴリの最新記事