Programming note」カテゴリーアーカイブ

Could not find xxxx in any of the sources(エラー対処法)

Could not find xxxx in any of the sourcesとは?

経緯:Macの空き容量が少なくなっていたのでClean / Purge dataで空き容量を増やした後に、

Dockerでdocker-compose upでコンテナを起動した時に発生したエラーです。

解決方法

gemfile.lockの記述を全て削除(まっさらな状態)した後に以下のコマンドをします。

$ rm gemfile.lock
$ docker-compose build
$ docker-compose up

エラーが出なくなっているのを確認したらOKです。

destroy_allの使い方(1対他モデルの一括削除)

destroy_allとは?

すでにテーブルに存在するレコードを一括で削除するメソッドです。

テーブルの状態

usersテーブル(1)にtasksテーブル(多)がhas_manyで紐付いています。

user.rbはこのようになっています。

# == Schema Information
#
# Table name: users
#
#  id              :bigint           not null, primary key
#  admin           :boolean          default(FALSE)
#  email           :string(255)
#  image           :string(255)
#  name            :string(255)
#  password_digest :string(255)
#  remember_digest :string(255)
#  created_at      :datetime         not null
#  updated_at      :datetime         not null
#
class User < ApplicationRecord
  has_many :tasks, dependent: :destroy
  accepts_nested_attributes_for :tasks, allow_destroy: true

1対多の場合は1の方(例としてuserとする)has_many :tasks, dependent: :destroyを追加記述することで、userを消したときに紐付いているtaskも削除されるようにできる!

sessions_helper.rbはこのようになっています(ほぼRailsチュートリアルと同じです)

module SessionsHelper

  # 記憶トークンcookieに対応するユーザーを返す
  def current_user
    if (user_id = session[:user_id])
      @current_user ||= User.find_by(id: user_id)
    elsif (user_id = cookies.signed[:user_id])
      user = User.find_by(id: user_id)
      if user && user.authenticated?(cookies[:remember_token])
        log_in user
        @current_user = user
      end
    end
  end

  # 渡されたユーザーがログイン済みユーザーであればtrueを返す
  def current_user?(user)
    user == current_user
  end

  # 記憶したURL (もしくはデフォルト値) にリダイレクト(フレンドリーフォワーディング)
  def redirect_back_or(default)
    redirect_to(session[:forwarding_url] || default)
    session.delete(:forwarding_url)
  end

end

task.rbはこのようになっています

続きを読む

FizzBuzz問題(Ruby)

FizzBuzz問題の復習をば

問題

整数 N が入力として与えられます。
1からNまでの整数を1から順に表示してください。
ただし、表示しようとしている数値が、
・3の倍数かつ5の倍数のときには、”Fizz Buzz”
・3の倍数のときには、”Fizz”
・5の倍数のときには、”Buzz”

を数値の代わりに表示してください。

入力例
18
出力例2
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
Fizz Buzz
16
17
Fizz

※ポイント

1.繰り返しを使う
2.繰り返しは基本0から始まってしまう
3.if文で各値を振り分けてあげる
4.0のとき判定がFizuBuzzと出力されてしまう
5.それをどうするか考える。

解答 範囲を使う場合(for inを使う)範囲オブジェクトの範囲分同じ処理を繰り返したり、配列の要素を順番に取得したい場合に使用するので

# Nを受け取る
n = gets.to_i
#範囲を作成する。(1から初めたいので)
m = (1..n)
for num in m do
  if num % 15 == 0
    puts "Fizz Buzz"
  elsif num % 3 == 0
    puts "Fizz"
  elsif num % 5 == 0
    puts "Buzz"
  else puts num
  end
end
puts

 

別解 uptoを使う場合(こっちのほうがいいかも)

# Nを受け取る
n = gets.to_i

1.upto(n) do |i|
  if (i % 15).zero?
    puts 'Fizz Buzz'
  elsif (i % 3).zero?
    puts 'Fizz'
  elsif (i % 5).zero?
    puts 'Buzz'
  else
    puts i
  end
end
puts

別解2 eachを使う場合

# Nを受け取る(例:18)
n = gets.to_i
#範囲を作成する。(1から初めたいので)(中身1..18)
m = (1..n)
#eachで1から18まで18回繰り返してもろて各値をif文で振り分ける
m.each do |m|
  if m % 15 == 0 
    puts "Fizz Buzz"
  elsif m % 3 == 0 
    puts "Fizz" 
  elsif m % 5 == 0 
    puts "Buzz" 
  else puts m 
  end
end

ERROR Rule can only have one resource source(エラー対処録)

①経緯:npm run devでサーバーを立ち上げる際に

ERROR Rule can only have one resource source (provided resource and test + include + exclude)

と表示されサーバー起動できない

②まず翻訳にかける

ERROR ルールは 1 つのリソースソースしか持つことができません(提供リソースとテスト + 包含 + 除外) と表示されました。

npmの依存関係の問題に関連しているようです。

③やってみたこと

npm i -D webpack@^4.46.0

カレントディレクトリに指定のパッケージをインストールするときに package.json の devDependencies欄 にパッケージ名が記録される。

④実行結果

npm WARN idealTree Removing dependencies.webpack in favor of devDependencies.webpack

npm WARN idealTree dependencies.webpack を削除して devDependencies.webpack を優先します。

added 74 packages, removed 121 packages, changed 29 packages, and audited 1290 packages in 14s

npm ruv dev で無事にサーバーが起動できました!

npm installで警告が出たとき(エラー対処録)

①経緯:npm install をしたときに↓のような表示が出たので

added 2 packages, and audited 1289 packages in 7s

105 packages are looking for funding
run `npm fund` for details

90 vulnerabilities (84 moderate, 6 high)

To address issues that do not require attention, run:
npm audit fix

To address all issues (including breaking changes), run:
npm audit fix --force

Run `npm audit` for details.

②:まず翻訳機にかけてみる

2パッケージ追加、7sで1289パッケージの監査を実施

105個のパッケージがを募集しています
詳細は `npm fund` を実行してください。

90件の脆弱性(中程度84件、高程度6件)

注意を払う必要のない問題に対処するには、実行します。
npm audit fix

すべての問題(ブレークチェンジを含む)に対処するには、実行します。
npm audit fix --force

詳細は `npm audit` を実行してください。

③:警告文の指示通りにコマンドをするだけ

npm audit fix

私の場合これで脆弱性が減りました・・・が0になってはいないので

引き続き調査します・・・

draw.io(インフラ構成図を作成する)

draw.ioとは?

フローチャートやオフィスのレイアウト図、ネットワーク図を作成できる無料の作図ツールです。これを使ってAWSのインフラ構成図を作成します。

draw.ioでインフラ構成図を作成

まず下記のURLからdraw.ioにアクセスします。
https://www.draw.io/

draw.io日本語で作業する

「Decide later」をクリックします。

右上の地球のマークをクリックします。

日本語を選択します。

ページを更新します。

日本語になっていればOKです。

ファイルの保存先は任意でOKです。

新規ファイル作成

左上のファイル→新規作成をクリックします。

「Cloud」を選択してAWSのアイコンがあるものを選択します。

左のタブから選択したりテキストを挿入したりして

このように作成することができます。

続きを読む

知っておくと便利なGoogle検索のテクニック(プログラミング)

駆け出しエンジニアが知っておくと便利なGoogle検索のテクニック

1:マイナス検索

Dockerについて書かれたコンテンツを検索したいが、
「PHP」という語を含むコンテンツは結果から除外したい場合は、
マイナス(-)記号の後に除外したい語を続けて検索します。

使用が想定されるケース:Rails+Dockerについて調べたいが、PHPについての記事は省きたい時など

検索例: Docker -PHP

2:完全一致検索

GoogleでDockerについて説明されたコンテンツを検索するとします。検索ボックスに「Docker」とだけ入力するのではなく、
これがフレーズであることを明示して検索する方法があります。それには次のようにフレーズを二重引用符で括って検索します。

使用が想定されるケース:余計なページを省きたいとき↓1/3カットできている。

 

続きを読む

AWS9(S3で画像を配信するWordPressの場合)

8.5から続く

インフラ設計における重要なポイント

可用性:サービスを継続的に利用できるか                   稼働率、災害対策、目標復旧時間

性能・拡張性:性能が十分で、将来的に拡張しやすいか        性能目標、拡張性

運用・保守性:運用と保守がしやすいか                    運用時間 バックアップ 運用監視、 メンテナンス

セキュリティ:情報が安全に守られているか                資産の公開範囲、ガイドライン情報漏えい対策

移行性:現行システムを他のシステムに移行しやすくなってるか 移行方式の規定、設備・データ 移行スケジュール

0:S3とは?(S3の概要)

以下のようなメリットが有ります。

①Webサービスのストレージが画像でいっぱいになるのを防ぎます。

②HTMLへのアクセスと画像へのアクセスを分けることで負荷分散できます(サーバーの台数を増やしやすい)

③ウェブサーバー上に画像が保存されていると、ウェブサーバーの台数を増やしたときに、画像を同期する必要がありスケールアウトが難しい。

④画像の保存場所は分離されていた方がウェブサーバーの台数を簡単に増やすことができる。

⑤コンテンツ配信サービスから配信することで画像配信を高速化できる。

⑥安価で耐久性が高い1GB約3円/月 +容量無制限1ファイル5TBまで

⑦バケットやオブジェクトに対してアクセス制限を設定できる

バケット:オブジェクトの保存場所のこと名前はグローバルでユニークな必要がある。

オブジェクト:データ本体の事URLが付与される。

キー:オブジェクトの格納URLパス。

よくある利用シーン

静的コンテンツの配信:Image画像はS3から配信します。

ログなどの出力先:定期的にS3にログを送ります。

静的ウェブホスティング:静的なウェブサイト(ランディングページなど)をS3から公開します。

バッチ連携用のファイル置き場:S3にファイルをおいて、バッチでそのファイルを参照して処理を行います。

1:S3のバケット作成

続きを読む

AWS8.5(WORDPRESSの構築とプロトコル)

その8から続く

WORDPRESSを構築

構築イメージ

ターミナルからEC2インスタンスに接続します。

ssh -i ~/Desktop/my-portfolio-sshkey.pem ec2-user@IPアドレス
mysql -h my-portfolio-web.c*******.ap-northeast-1.rds.amazonaws.com -u admin -p

my_portfolio_webというデータベースを生成し、デフォルトの文字コードをutf8にします。
(多言語を示すgeneralと大文字と小文字を区別しないciオプションも付けます)

CREATE DATABASE my_portfolio_web DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
show databases;

Databaseに追加されているのを確認します。

新しいユーザーを作成します。

続きを読む

AWS8(【RDS】データベースサーバーを構築しよう)

その7から続く

【RDS】DBサーバーを構築しよう

構築イメージ

プライベートサブネットにDBサーバーを設置します。

複数のアベイラビリティゾーンにサブネットを設置すると可用性が高まります。

RDSとは?

フルマネージドなリレーショナルデータベースのサービスです。
構築、運用の手間の軽減によりコア機能の開発に注力できて
AWSエンジニアによるデータベース設計のベストプラクティスを適用
します。

RDSで利用可能なエンジン

MySQL
PostgreSQL
Oracle
Microsoft SQL Server
Amazon Aurora
MariaDB

各種設定グループ

DBパラメータグループ:DB設定値を制御
DBオプショングループ:RDSへの機能追加を制御
DBサブネットグループ:RDSを起動させるサブネットを制御

特徴

マルチAZを簡単に構築=可用性の向上
リードレプリカ(読み取り専用のレプリカ)を簡単に構築できます。

自動的なバックアップ
1日1回バックアップを自動取得(スナップショット)
スナップショットをもとにDBインスタンスを作成(リストア)
自動的なソフトウェアメンテナンス:自分で設定もできる
監視:各種メトリクスを60秒間隔で取得・確認可能

2つ目のプライベートサブネットを作成しよう!

※マルチAZを利用する場合設定しますが、使わない場合はSkipします。

VPCで検索して「VPC」をクリックします。

続きを読む