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

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

warning ../../package.json: No license field の解決法

# はじめに
Railsチュートリアルを学習中、
rails s を実行すると
“`
warning ../../package.json: No license field
“`
このエラーがずっと表示されていました。(ローカルでのサーバーは起動する)

気になったので、解決法を調べました!

# バージョン
Ruby 2.6.3
Rails 6.0.4

# 結論
まず結論から書きます!
“`
rm -rf yarn.lock
“`

を実行するとエラーが解消されました!

今回はyarn installが適切に行われていないために表れたエラーでした。
yarn.lockのコンフリクトを解消することでエラーが解消されました。

# 解決までに試したこと
warning ../package.json: No license fieldでは
ライセンスが設定されていないということなので、
ググってみると、主に下記の解決法がヒット!

– package.jsonに適切なlicenseをセットする。
– package.jsonに”license”: “UNLICE

元記事を表示

エラー対応 -備忘録

# 環境
* macOS Monterey 12.0.1
* Ruby 2.6.3
* Bundler 2.2.17
* Rails 6.0.4.7

## エラー内容
“`
ubuntu:~/environment/hello_app (master) $ rails s
=> Booting Puma
=> Rails 6.0.4 application starting in development
=> Run `rails server –help` for more startup options
warning ../../package.json: No license field
Puma starting in single mode…
* Version 4.3.6 (ruby 2.6.3-p62), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp:

元記事を表示

Railsのシステムテスト(Minitest)で「期待どおりに404エラーが発生したこと」を検証する方法

Railsのシステムテスト(Minitest)で「期待どおりに404エラーが発生したこと」を検証する方法が意外と厄介だったので説明します。

### 対象バージョン

– Rails 6.1.5
– Capybara 3.36.0
– selenium-webdriver 4.1.0

### おことわり

この方法がベストなのか自信がないので、もっといい方法を知っている人がいたらコメント欄等教えてください🙏

## 404エラーの発生を検証したいユースケースの例

– ログイン済みユーザーしか表示させたくないページに、未ログインのユーザーがアクセスしてきた場合に404エラーを返すことをシステムテストで検証したい

302リダイレクトでトップページに遷移し、「ログインしてください」のメッセージを表示する、という挙動もありそうですが、ここではあえて404エラーを表示するものとします。

## ベースとなるテストコード

ここでは以下のようなテストコードを書いたものとします(上で書いたユースケースとは関係のない、単なる動作確認用のテストコードです)。

“`ruby
require “

元記事を表示

グループ登録機能を追加してみた:改

前回deviseを使ってgroup機能の登録を試みたが、中間テーブルに保存されないという現象が起きてしまった。
3時間考えた末、いい解決方法が見つからなかったので、思い切って1から作り直すことに。

### 今回試みた事
* group機能の実装はdeviseではなく、“rails g model group“を使用する
* カラムにはパスワードを設定する

### 手順
まずはモデルの作成

“`:ターミナル
rails g model group
“`

次に必要なカラムを記述。
“`ruby:db/migrate/xxxxx_create_group.rb
class CreateGroups < ActiveRecord::Migration[6.0] def change create_table :groups do |t| # 以下の3行を追記 t.string :group_name, null: false, default: "" t.string :password_digest, null: false, def

元記事を表示

Railsの開発環境でAWSサービスを使うとminioの設定とAws.configの競合が発生する

# まとめ

ローカルの開発環境でminioを使いながらAWSのcredentialを同時に扱うことは難しそう

なので、各サービスのクライアント生成時にcredential情報を渡すことになるかも

`config/initializers/aws.rb`

“`rb
creds = Aws::Credentials.new(
Rails.application.credentials[:aws][:access_key_id],
Rails.application.credentials[:aws][:secret_access_key]
)

region = Rails.application.credentials[:aws][:region]

Aws.config.update(
region: region,
credentials: creds
)
“`

と宣言しておき

“`rb
def client
conf = Aws.config
access_key_id_sym = Rails.env.develop

元記事を表示

メタプログラミングRuby クラス定義について

## クラス定義
クラスにはメソッド以外にもあらゆるコードを記述できます。
“`
class Example
puts ‘Hoge!’
end #=>Hoge!

result = class Example
self
end

result #=> Example
“`
クラス定義の中では、クラスがカレントオブジェクトになるんです。つまりselfになるんです。

### クラスインスタンス変数
クラス定義の中で定義されたインスタンス変数のことをクラスインスタンス変数といいます。
実際にコードを見ていきましょう
“`
class Example
@var = 1
def self.read; @var; end
def write; @var = 2; end
def read; @var; end
end

obj = Example.new
obj.read #=> nil
obj.write #=> 2
obj.read #=> 2
Example.read #=> 1
“`
1つ目の“`@var“`は“`obj“`がselfになるんです。

元記事を表示

初めてRubyのgemを読んでみる

# はじめに
難易度が比較的低く、初めてにおすすめのsettingslogicを読んでみることにしました。

# settingslogicとは
簡単にいうと異なる値を環境ごとに持たせることができるようになるgemです。
https://github.com/settingslogic/settingslogic

# 動きの確認

まずは、applicationに以下のクラスを定義します。
Settinglogicを継承したSettingsクラスです。
ここでは、sourceとnamespaceの定義をしています。

“`ruby
class Settings < Settingslogic source "#{Rails.root}/config/application.yml" namespace Rails.env end ``` Settingsクラスでsourceを指定していることにより、以下のファイルから値を読み込んでくれます。 ```ruby # config/application.yml defaults: &defaults cool:

元記事を表示

ifとeach_with_indexで条件に応じたViewを表示させる

ブログサイトで、

1)広告があれば大見出しに広告を入れて、その下にブログ記事を配置

2)広告がなければ大見出しにブログ記事の1つめを配置

といった具合に、場合によってデザインを分けたい。

![完成形のイメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496677/f585810d-7e3c-1605-4c19-ffc9993bc9b2.png)

完成形のイメージ

DBは説明のため簡略化して考える

![記事テーブルと広告テーブルのみ考える](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2496677/39977f21-d68e-703a-6b5c-3ccaf3bfa441.png)

記事テーブルと広告テーブルのみ考える

### コントローラー

HomeController

“`ruby
def index
@articles = Article.all
@affiliate = Affiliate.w

元記事を表示

Rails×Reactでアフィリエイトシステムを作る

以前携わった案件でアフィリエイト機能を付け足そうか議論になったことがあり、(結局はやらなかった)それを思い出したので実装してみました。
ちなみにアフィリエイトとはAmazonや楽天で販売されている商品を自身のSNSやメディアなどに掲載し、そこから発生した売上の一部を還元されるという仕組みです。代表的な例として[Amazonアソシエイト](https://affiliate.amazon.co.jp/)や[楽天アフィリエイト](https://affiliate.rakuten.co.jp/)などがあります。
皆さんがブログなどでよく見る商品のバナー広告などのことです。アフィリエイターはアフィリエイトリンクをブログなどに差し込んでそのリンクから発生したうりあげの一部がアフィリエイターに還元されます。

**※ 今回はcorsの設定やユーザーの認証周りなど色々省略しているので、そのままだと動かないかもしれませんがアフィリエイトの簡単な仕組みの紹介なので今回はご容赦ください🙇‍♂️**
ちなみに筆者は認証周りのライブラリは[device_token_auth](https://githu

元記事を表示

【Rails】主キー以外でテーブル間を関連付ける

## 前提条件
以下のような関係性を想定します。
`staff(職員)`の中には、`manager(マネージャー)`の権限を持っている者がいて、
`manager`は`assessment(評価)`することができる。
今回は赤枠`(manager-assessments)`に焦点を絞る。
(「初めからmanager_idを主キーにすればいいじゃん」
というツッコミは今回スルーさせていただきます。m(_ _)m )
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2508607/630bb79e-6121-3c9f-d44d-237cb8943e74.png)

## やりたいこと
`primary_key`を意図的に変更したい。
(関連づけの際に主キー`(primary_key)`を選択しない場合、(Rails が空気を読んで)
`manager_id`が`primary_key`になる。)

## 方法
以下をモデルに追記すればOK
“`Manager.rb
has_many :

元記事を表示

rails db:migrateしたのにDBに反映されなかった時の話②

# はじめに
1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
rails db:migrateコマンドを実行した際にDBに反映されなかったことについて書きます。
今回は解決編ということで、昨日の続きです。
※Ruby2.6.5の環境を使用し学習しています。

# おさらい
rails db:migrateを実行すると下記のようにエラーになりました。
焦ってエラー元のusersテーブルを作り直してしまったため、ゴミファイル(NO FILE)ができてしまい、昨日はそれを削除した手順について書きました。
“`:ターミナル
% rails db:migrate
== 20220310073337 CreateDietrecords: migrating ================================
— create_table(:dietrecords)
-> 0.0140s
== 20220310073337 CreateDietrecords: migrated

元記事を表示

CloudFront => Rails で直結する場合は X-Forwarded-Proto ではなく X-Forwarded-SSL ヘッダを付けると良い

Rails + AWSで雑にhttps を立てたいと思い

CloudFront(https) => EC2(Railsアプリ/http)

という構成でアプリを作ると、 GET 以外のリクエストを投げるとこんなエラーが出る

“`
HTTP Origin header (https://xxx.cloudfront.net) didn’t match request.base_url (http://xxx.cloudfront.net)
“`

ApplicationController で適当にリクエストヘッダーを出力してあーでもないこーでもないとこねくり回してみたのだが・・・
“`
class ApplicationController < ActionController::Base before_action :env_log private def env_log request.headers.sort.reject { |k, _| k.to_s.include?('.') }.each { |k, v| logger.info "#{k

元記事を表示

【Railsチュートリアル】1章のHerokuデプロイでArgumentError

# 要約
HerokuでサポートされているRubyのバージョンと手元のバージョンを揃えたら解消した。

# 概要
Railsチュートリアル第4版の「1.5.2 Herokuにデプロイする (1)」でエラーが発生し、デプロイできなかった。

# 環境
チュートリアル通りの手順で環境構築。
* OS:Ubuntu18.04 (AWSのCloud9を利用)
“`bash
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION=”Ubuntu 18.04.6 LTS”
“`
* Rails:5.1.6
* Ruby:2.6.3
* Gemfile:以下の通り
“`rb:Gemfile
source ‘https://rubygems.org’

gem ‘rails’, ‘5.1.6’
gem ‘puma’, ‘3.9.1’
gem ‘sass-rails’, ‘5.0.6’
gem ‘uglifier’, ‘3.2.0’
gem ‘c

元記事を表示

cancancanでモデル名に紐づかない制御をする方法

# はじめに

権限制御のgemとして、[cancancan](https://github.com/CanCanCommunity/cancancan)があると思います。
基本的な使い方はいろいろなところで記事になっていますが、「コントローラ名通りのモデルがないとき」の権限制御方法について記載します。

# 例

コントローラで次のように記載

“`rb
class ProfilesController
authorize_resource class: :profile # ここではコントローラ名と同じprofileにしていますが、コントローラと名前を揃える必要もないです

def new

end

def edit

end

end
“`

シンボルの形で描くことで、モデルがなくても権限管理することができます。
あとは通常の使い方と同じで、abilityクラスで定義していきます。

“`rb
class Ability
include CanCan::Ability

def initialize(user

元記事を表示

devise でグループ登録機能を追加してみた

今回初めての試み。
ユーザー登録機能とは別にdeviseを使ってグループ登録機能の実装をしてみた。

### やりたい事
* deviseを使用してグループ登録機能(新規登録、ログイン)を実装
* 新規登録にはグループ名とパスワードが必要(今回emailは必要なしとする)

### 前提
* 既にdeviseを使用してユーザー機能は実装済み

### グループのモデル作成
まず初めに、ユーザーとグループのログイン画面を別々にしたいので、下記を入力。

“`ruby:config/initializers/devise.rb
# ==> Scopes configuration
# Turn scoped views on. Before rendering “sessions/new”, it will first check for
# “users/sessions/new”. It’s turned off by default because it’s slower if you
# are using only default views.
config.

元記事を表示

【Ruby on Rails】rubocopのローカル実行コマンド

Bundlerを利用している場合
“`
bundle exec rubocop
“`

ファイル指定も可能
“`
bundle exec rubocop 実行ファイルパス
“`
例えば
“`
bundle exec rubocop spec/XXXXX/XXXX/XXspec.rb
“`

元記事を表示

【個人開発】人生を振り返ることができるアプリを作りました。

# はじめに
![ogp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/307408/6dd00f62-29cc-3aa2-9d53-a8853001a41e.png)
この度「人生を可視化できるアプリ【つづる自分史】」をリリースしました!!
このサービスの**概要**や**思い**など色々書きましたので良ければ最後までご覧ください!!

【Twitterアカウント】

【今回作ったサービス】
https://www.tsuzuru-jibunshi.com/

【GitHub】
https://github.com/shiramizu-junya/personal_history

# アプリを作ったキッカケ
誰しも長い人生を生きていると、失敗したり、挫折することは多々あると思います。
私も失敗してきました。
しかし、そこから立ちあがろうと思っても、自分の経歴に自信がなく、人生を人に見せることに対して恥ずかしい感情がありました。
そんな感情か

元記事を表示

【Github Actions】本番環境だけコンフリクトが起こる

# はじめに
某プログラミングスクールで作成した、ポートフォリオを改善しようとした際に躓いたので備忘録。
デプロイのおさらいも書いています。
スクール卒業後で、メンターに質問できずに困っている初学者に参考になれば幸いです。

また間違っているところがあればご教授お願いします。

# 環境
Ruby 2.6.3
Rails 5.2.6
本番環境 Nginx/Puma/Linux2/AWS EC2/MySQL

# エラーの状況
railsアプリをGithub ActionsでCI/CD設定し、デプロイ済み。
修正したい箇所があったので、
topicブランチで修正→developブランチにmerge&push→mainブランチにmerge&pushは問題なく成功している。

が、Github Actionsの画面で確認すると以下のエラーが生じている。

“`
Run echo “$PRIVATE_KEY” > private_key && chmod 600 private_key
Warning: Permanently added ‘***’ (ECDSA) to the li

元記事を表示

rails db:migrateしたのにDBに反映されなかった時の話①

# はじめに

1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
今回は rails db:migrateコマンドを実行した際にDBに反映されなかったことについて書きます。
長くなるので2つの記事に分けます。
まずは”NO FILE”というマイグレーションファイルができてしまったことについて書きました。
※Ruby2.6.5の環境を使用し学習しています。

# 事象

rails db:migrateを実行すると下記のようにエラーになりました。
“`:ターミナル
% rails db:migrate
== 20220310073337 CreateDietrecords: migrating ================================
— create_table(:dietrecords)
-> 0.0140s
== 20220310073337 CreateDietrecords: migrated (0.0141s) ==================

元記事を表示

railsにwebpackerを導入する方法

railsにwebpackerがない場合、導入する方法を紹介します。

※ 注意

webpackerをインストールするにはyarnを先にインストールしておく必要があります。

brewよりnpmでyarnをインストールした方がいいそうです。

https://qiita.com/suisui654/items/1b89446e03991c7c2c3d

https://qiita.com/NaokiIshimura/items/8203f74f8dfd5f6b87a0

まず最初にrailsのアプリを作成した状態にしておきます。

railsのアプリが作成できたら

rails の gemfile に 以下を入力します。

“`terminal:gemfile
gem ‘webpacker’, ‘~> 4.0’
“`

次にターミナルでアプリファイルの場所でbundle installと入力します、

“`terminal:terminal
bundle install
“`

最後にターミナルでrails webpacker:installと入力します。

“`termi

元記事を表示

OTHERカテゴリの最新記事