- 1. warning ../../package.json: No license field の解決法
- 2. エラー対応 -備忘録
- 3. Railsのシステムテスト(Minitest)で「期待どおりに404エラーが発生したこと」を検証する方法
- 4. グループ登録機能を追加してみた:改
- 5. Railsの開発環境でAWSサービスを使うとminioの設定とAws.configの競合が発生する
- 6. メタプログラミングRuby クラス定義について
- 7. 初めてRubyのgemを読んでみる
- 8. ifとeach_with_indexで条件に応じたViewを表示させる
- 9. Rails×Reactでアフィリエイトシステムを作る
- 10. 【Rails】主キー以外でテーブル間を関連付ける
- 11. rails db:migrateしたのにDBに反映されなかった時の話②
- 12. CloudFront => Rails で直結する場合は X-Forwarded-Proto ではなく X-Forwarded-SSL ヘッダを付けると良い
- 13. 【Railsチュートリアル】1章のHerokuデプロイでArgumentError
- 14. cancancanでモデル名に紐づかない制御をする方法
- 15. devise でグループ登録機能を追加してみた
- 16. 【Ruby on Rails】rubocopのローカル実行コマンド
- 17. 【個人開発】人生を振り返ることができるアプリを作りました。
- 18. 【Github Actions】本番環境だけコンフリクトが起こる
- 19. rails db:migrateしたのにDBに反映されなかった時の話①
- 20. railsにwebpackerを導入する方法
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
endresult #=> Example
“`
クラス定義の中では、クラスがカレントオブジェクトになるんです。つまりselfになるんです。### クラスインスタンス変数
クラス定義の中で定義されたインスタンス変数のことをクラスインスタンス変数といいます。
実際にコードを見ていきましょう
“`
class Example
@var = 1
def self.read; @var; end
def write; @var = 2; end
def read; @var; end
endobj = 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つめを配置
といった具合に、場合によってデザインを分けたい。

完成形のイメージ
DBは説明のため簡略化して考える

記事テーブルと広告テーブルのみ考える
### コントローラー
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 )
## やりたいこと
`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
…
enddef edit
…
endend
“`シンボルの形で描くことで、モデルがなくても権限管理することができます。
あとは通常の使い方と同じで、abilityクラスで定義していきます。“`rb
class Ability
include CanCan::Abilitydef 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
“`
【個人開発】人生を振り返ることができるアプリを作りました。
# はじめに

この度「人生を可視化できるアプリ【つづる自分史】」をリリースしました!!
このサービスの**概要**や**思い**など色々書きましたので良ければ最後までご覧ください!!【Twitterアカウント】
Tweets by webpg_jun【今回作ったサービス】
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