- 1. 【Docker】Rails API + Reactの環境構築
- 2. cancancanのテストをRSpecで書く
- 3. docker-composeで環境変数が読み込めないときの対処法。[WARNING: The MYSQL_ROOT_PASSWORD variable is not set.]
- 4. Deviseで特定のステータスのユーザーにログインさせない方法とエラーの日本語化(Rails)
- 5. rails6 Bootstrapテンプレートでのエラー
- 6. annotate_modelsを導入したのにアノテーションが動かなかった
- 7. rspecの導入手順 json コントローラテスト
- 8. バージョン指定で”rails new”したら”Gem::GemNotFoundException”でコケたとき用
- 9. Rubyにおけるインスタンスメソッドとクラスメソッドの違い
- 10. Rubyにおけるprivateメソッド
- 11. find_or_initialize_byとfind_or_create_byについて
- 12. I18n::InvalidLocaleエラーについて
- 13. Stimulusを使ってドラッグ&ドロップでファイルアップロード
- 14. warning: constant Gem::ConfigMap is deprecated
- 15. Sprockets::ArgumentError at / link_tree argument must be a directory
- 16. 【Rails】Herokuデプロイ時のbundler エラー
- 17. さくらvpsにRailsアプリをデプロイするまで (1) 各種設定
- 18. (独習Ruby on Rails)フォームオブジェクトを利用したバリデーション
- 19. rails db:reset コマンドの挙動について
- 20. 【Heroku】データベース作成
【Docker】Rails API + Reactの環境構築
## はじめに
本記事は、プログラミング初学者、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。## DockerでReactの開発環境を構築する方法
### Docker-compose.yml“`docker-compose.yml
version: ‘3.9’services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: passwordadmin
MYSQL_DATABASE: mydb
MYSQL_USER: root
MYSQL_PASSWORD: passwordadmin
TZ: ‘Asia/Tokyo’
command: mysqld –character-set-server=utf8mb4 –collation-
cancancanのテストをRSpecで書く
cancancanを使った際、テストに学びがあったので投稿します。
# 前提:cancancanとは
権限による制御が簡単にできるgemです。
– [cancancan](https://github.com/CanCanCommunity/cancancan)
– [Rails|CanCanCanの使い方解説](https://weseek.co.jp/tech/1211/)
↓私も1つ記事を書きました。
– [cancancanでモデル名に紐づかない制御をする方法](https://qiita.com/m-ito27/items/784f22bec151cc2f1e28)# cancancanのテスト
requestスペックなどで特定の権限が各アクションを実行できるかどうかをテストする方法もあると思いますが、今回はcancancanが用意しているmatcherを使ってテストする方法を紹介します。– 参考
https://github.com/CanCanCommunity/cancancan/blob/develop/docs/testing.md“`ruby:a
docker-composeで環境変数が読み込めないときの対処法。[WARNING: The MYSQL_ROOT_PASSWORD variable is not set.]
Rails(API) + MySQL + Reactという構成でポートフォリオを作成する中で、ローカルで開発したものをコンテナに入れて動かす際に環境変数関係でハマりました。
原因は簡単なことでしたが、解決までかなりの時間がかかったため、その道のりを記録に残しておきます。
## 前提条件
・macOS Monterey v12.1
・ruby 3.0.3
・Rails 6.1.5
・MySQL 8.0.28
・Docker 20.10.12
・Docker Compose v2.2.3## やりたいこと
`docker-compose.yml`で`.env`に記載した環境変数を読み込みたい。
“`yml:docker-compose.yml
version: ‘3’services:
db:
image: mysql:8.0.28
volumes:
– ./etc/my.cnf:/etc/mysql/conf.d/my.cnf
– hanger-talk_data:/var/lib/mysql
environment:
Deviseで特定のステータスのユーザーにログインさせない方法とエラーの日本語化(Rails)
Deviseを使っていたRailsアプリケーションで、ログイン情報としてIDとパスワードとは別に、**特定の条件をユーザーが満たす場合にそのユーザーのログインを許可したくない**場面があり、その際の制御と日本語表示を学んだので備忘として記載します。
# やりたいこと
ユーザーはメールとパスワードでログイン可否の認証を行なっている。
しかしながら、ユーザーテーブルにはロック状態かどうかを判定するカラムがあり、ユーザーがロックされている場合にはログインさせたくない。
また、エラーメッセージを日本語化したい。## 1. ユーザーにログインさせない方法
結論:Deviseが用意している[`active_for_authentication?`メソッド](https://github.com/heartcombo/devise/wiki/How-To:-Customize-user-account-status-validation-when-logging-in) を使う
“`ruby:user.rb
def active_for_authentication?
super &
rails6 Bootstrapテンプレートでのエラー
こちらは、私がBootstrapのテンプレートを使用した時につまづいたエラーについて紹介します。
# 環境
ruby 3.0.2
rails 6.1.4
bootstrap 5.0.0-beta3
popperjs 2.10.2
webpacker 5.0# エラー内容
bootstrpのテンプレートをインストールし、ダウンロードしたフォルダやファイルを自分のアプリに組み込んでいきます。
その時に、stylesheetsフォルダーに必要なcssやscssのファイルも一緒に移行しました。
そして、ローカルにアクセスして見たところ、
“`
Sprockets::DoubleLinkError
“`
こちらは、「同じ出力パスを持つ複数のファイルをリンクできない」というエラーのようでした。# つまづいたポイント
Rails6からwebpackerがデフォルトでインストールされるようになりました。
webpackerでは、cssファイルではなくscssファイルを使用することでスタイルの編集が可能になります。
なので、stylesheetsフォルダー中にcssファイルかscssファイ
annotate_modelsを導入したのにアノテーションが動かなかった
# 環境
Ruby 3.0.2
Rails 7.0.2.3# Annotate models
モデルファイルなどに、↓のようなマイグレーションの内容を自動で書いてくれるツール
“`ruby
# == Schema Info
#
# Table name: line_items
#
# id :integer(11) not null, primary key
# quantity :integer(11) not null
# product_id :integer(11) not null
# unit_price :float
# order_id :integer(11)
#class LineItem < ActiveRecord::Base belongs_to :product . . . ``` [ここ](https://github.com/ctran/annotate_models#install)を参考
rspecの導入手順 json コントローラテスト
## 序文
RSpecを初めて使ってみましたので手順を残します。
## Gemfileにrspecを入れましょう
“`
group :development do
gem ‘rspec-rails’
end“`
## specファイルを作りましょう
“`
rails g rspec:controller the_dog“`
## テスト環境設定
テスト環境の設定ができているか見直しましょう
例)
– config/database.ymlにテスト用のDBを指定
– config/test.yml.encの追加
– config/settings/test.yml
– rails db:environment:set RAILS_ENV=test“`
require ‘rails_helper’RSpec.describe Api::V1::TheDogController do # コントローラ名
render_views
describe “GET /index” do
it do
request.env[“
バージョン指定で”rails new”したら”Gem::GemNotFoundException”でコケたとき用
# そもそも
– 現場Railsの3章、”taskleaf”アプリケーションの準備段階で躓く(バージョン指定でnewが出来ず)
– バージョン指定での”rails new”以外の方法があるっぽいので実践してみたログ# 手順
#### アプリのディレクトリを作成する
“`
mkdir hoge
“`#### ディレクトリに移動
“`
cd hoge
“`#### bundle initする
– (これ要るのか?要調査)
“`
bundle init
“`#### できたGemfileにRailsのバージョンを書き込む
“`rb:Gemfile
gem “rails”, ‘5.2.1’
“`#### bundle installする
“`
bundle install
“`#### Rails new(質問にはYで答える)
“`
$ rails _5.2.1_ new . -d postgresql –skip-bundle
“`#### Gemfileのsass-railsのバージョン指定を外す
– 次にbundle installす
Rubyにおけるインスタンスメソッドとクラスメソッドの違い
用語の違いは以下になります。
“`ruby:qiita.rb
class User
# これがインスタンスメソッド
def hello
p “hello”
end# これがクラスメソッド
def self.hello
p “hello”
end
end
“`selfが付くやつがクラスメソッド。完
Rubyにおけるprivateメソッド
privateメソッドについて全くわからなかったので簡易的にまとめました。
以下の場合、クラスの外から呼び出しているのでエラーになる。
“`ruby:sample.rb
class User
privatedef hello
puts ” ハローワールド”
end
enduser = User.new
user.hello
“`
つまり作成したインスタンスからは呼び出せないのです。ということで、次のようにクラス内で、privateメソッドを呼び出すメソッドをあらたに定義する。
そして新たに定義したメソッドを実行。“`ruby:sample2.rb
class User
def say
hello
endprivate
def hello
puts ” ハローワールド”
end
enduser = User.new
user.say
“`
つまり、privateではないメソッドを一枚挟んだらいいということでした。完
find_or_initialize_byとfind_or_create_byについて
## 2つのメソッドの違い
Railsを勉強していく中でこの2つのメソッドに遭遇したのでそれのアウトプットをしていこうと思います。結論からいうと、**新規作成した後保存するかしないか**が違いです。
| メソッド名 | 挙動 |
|:-:|:-:|
| find_or_initialize_by | 新規作成した後保存しない |
| find_or_create_by | 新規作成した後保存する |恐らく使い道は、送信フォームで戻るボタンを実装する際に使われたりするのかなとおもいます。
【参考文献】
https://qiita.com/taimuzu/items/0a21738d018f475d63ae
I18n::InvalidLocaleエラーについて
今回ツイート機能の投稿日時を以下の手順で日本時間に設定したところ、
deviseの新規登録時の生年月日入力欄でエラーが発生した。原因としてはもともとen.yml(英語)で設定されていたのにも関わらず、
ツイート時間を無理やりja設定にしてしまったのが理由でエラーが出てしまったと推測する。ツイート時間変更時に行なった作業
①config/application.rbを以下のように設定
“`config/application.rb
module TimeFormatSandbox
class Application < Rails::Application # ... # デフォルトのロケールを日本(ja)に設定 config.i18n.default_locale = :ja end end ``` ②次に表示したいhtml上を以下のようにlメソッドを使用するための設定をした ```index.html.erb<%= l user.created_at %> “`
“`config/locales/ja.yml
ja:
Stimulusを使ってドラッグ&ドロップでファイルアップロード
Rails で input[type=file] の入力欄にファイルをドラッグ&ドロップして選択する機能を追加しようと調べてみたのですが、script 要素にべた書きの実装例しか見つからなかったので、Stimulus を使った実装をしてみました。
# 環境
+ Ruby 3.1.1
+ Ruby on Rails 7.0.2# View
既存のページには、data-controller 属性と data-action 属性と data-*-target 属性を追加するだけなので、ほとんで手を入れずに済みます。
Stimulus 側に file_drop という名前のコントローラを作るので、data-* 属性の値や名前もそれに合わせます。
“`erb:app/views/users/_form.html.erb
…warning: constant Gem::ConfigMap is deprecated# warning: constant Gem::ConfigMap is deprecated
## 初めに
先日他の人のrubyのプロジェクトと`git clone`でクローンしコードをレビューする機会があり、その際に表示されたエラーについて書いていこうと思います。## 原因
rubygemのバージョンが遅れていることによって起きるエラー## 解決方法
rubygemを入れ直してあげてバージョンを変えてあげればok
“`
$ gem uninstall rubygems-update
$ gem install rubygems-update -v=2.7.6
$ update_rubygems
“`Sprockets::ArgumentError at / link_tree argument must be a directory

## 初めに
今回は上記の写真のエラーについて、解説をしていこうと思います。
他の人のリポジトリから、railsのプロジェクトを引っ張ってきた際に出てきたエラーになります。## 原因
まずSporoketsに対してエラーが吐かれているので、画像の読み込みらへんでエラーが吐かれているのかなと推測しました。そこで、`rails assets:precompile`を実行しエラーを確認しました。
そこで出力されたのが、`Sprockets::ArgumentError: link_tree argument must be a directory
/Users/hibiki/Desktop/Submission2-bookers_app/app/assets/config/manifest.js:1
Tasks: TOP => assets:p【Rails】Herokuデプロイ時のbundler エラー
# Herokuへのデプロイ時にエラー発生
rails アプリをHerokuにデプロイしてHerokuを
開こうとしたが、開かず。“`
BUNDLED WITH
2.2.17
“`gemfileのbundelerの記述を削除したら解決。
Herokuで使用するbundlerのバージョンと
開発環境で使用するbundlerのバージョンの
差異が原因?かも以上
さくらvpsにRailsアプリをデプロイするまで (1) 各種設定
# 0.でぷろいまで
ついに個人アプリが形になった。つぎはデプロイまですることにした。HerokuやAWSを使う方法があるが、前者は速度が遅いし、後者は金額が高すぎる。AWSには無料枠があって、サービスの種類によってはアカウント取得から1年間無料で利用できるものもあった。しかし、私はすでにアカウントを開設してからしばらくの年月が経っていたのでできない。ちょっとかんがえてさくらvpsを使うことにした。月額1000円程度で使えるみたいだし、独自ドメインの設定やhttpsの設定もできるらしい。やっていこう。
アカウントを取得した。
https://vps.sakura.ad.jp/
# 1.サーバーの設定
もろもろのやりかたは公式に書いてある。https://knowledge.sakura.ad.jp/8218/
## 1-1.やっていこう
#### rootログイン
さくらvpsサーバーを起動したら、ターミナルに打っていく。
“`terminal
$ ssh root@xxx.xxx.xxx.xxx
“`xxx.xxx.xxx.xxxにはサーバーの
(独習Ruby on Rails)フォームオブジェクトを利用したバリデーション
# 概要
ある程度勉強を進めていたけれど、あまりにも基礎が不足しているので書籍「独習Ruby on Rails」をやり始めたのだけれど、フォームバリデーションのところでサンプルコードどおりに入力しても全然動かなかったのでその対応をメモとして残す。## 環境
・Rails 7.0.2.2
・ruby 3.0.0
・macOS Monterey 12.2.1## フォームオブジェクトによるバリデーション
### 例題概要
– 書籍の例題としてはフォームオブジェクトを利用したバリデーションで利用規約のチェック機能を実現するというもの。
– チェックボックスではなくテキストフィールドに’yes’と入力した場合に正常形として画面遷移し、それ以外はエラーを表示するというもの。(サンプルイメージ)

rails db:reset コマンドの挙動について
# はじめに
1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
rails db:resetコマンドを実行した際に疑問に思った事があったのでメモを残します。
※Ruby2.6.5の環境を使用し学習しています。# 経緯
以前書いた`rails db:migrateを実行した時に出たエラーを解決した話`で書いていなかったのですが、
`rails db:reset`を実行後、再度`rails db:migrate`を実行してしまい、何も出力されずプロンプトが返ってきました。
そこで`rails db:reset`が気になり調べてみました。# 調べた結果
結論としては下記のような動きをしているようです。
[4.3 データベースをリセットする](https://railsguides.jp/active_record_migrations.html#%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E3%83%AA%E3%82%BB【Heroku】データベース作成
# Herokuにデータベースを作成する。
railsアプリをデプロイしたがエラー発生“`
2022-03-16T11:32:52.061551+00:00 app[web.1]: [53d442bd-fd35-4dfb-9c9f-eb1fc62006c8] ActionView::Template::Error (PG::UndefinedTable: ERROR: relation “users” does not exist
“`userテーブルが見つからないよと
## Herokuでもデータベースを作成
ローカルでデータベースを作成するのと同じように
Herokuでもデータベースを作成しないといけないみたい“`
$ heroku run db:migrate
“`
モデルを作成、変更したら忘れないように以上
関連する記事
OTHERカテゴリの最新記事
-
- 2023.09.23
iOS関連のことを調べてみた2023年09月23日
-
- 2023.09.23
Python関連のことを調べてみた2023年09月23日
-
- 2023.09.23
Ruby関連のことを調べてみた2023年09月23日
-
- 2023.09.23
Rails関連のことを調べてみた2023年09月23日
-
- 2023.09.23
Python3関連のことを調べてみた2023年09月23日
-
- 2023.09.23
PHP関連のことを調べてみた2023年09月23日