月別アーカイブ: 2022年3月

ActiveRecord::NoDatabaseError – Unknown database ‘xxx’:(エラーメッセージ対処法)

Docker + Railsで開発中の時に遭遇しました。

ActiveRecord::NoDatabaseError – Unknown database ‘xxx’:とは?

docker-compose upでコンテナを起動した時に発生

データベースが作成されていないためのエラーなのでデータベースを作成します。

$ docker-compose exec web bundle exec rake db:create

Created database ‘***’と出ていればOKです。

この状態でアクセスすると

Migrations are pending. To resolve this issue, run:というエラーが発生します。

マイグレートすれば解決するので、マイグレートします。

$ docker-compose exec web bundle exec rake db:migrate

docker-compose upでコンテナを起動してエラーが出なくなっているのを確認しました。

Migrationを保留しているというエラーだったのでMigrationを実行するとエラーが出なくなります。

ポートフォリオの修正の仕方(AWS+Rails)

ポートフォリオで修正や追加する時に見る(自分用)

Nginxがおかしい時にするコマンド

curl -IXGET http://IPアドレス

正常の場合このように表示されます。

HTTP/1.1 200 OK
Server: nginx/1.20.0
Date: Sat, 19 Mar 2022 06:41:17 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
ETag: W/"919d450b157b488f0"
Cache-Control: max-age=0, private, must-revalidate
Set-Cookie: _todo_session=b2********R5Sy9mhX1RV1dWR01Hek1aR2JWcDNRPT0tLVdrNnp5dlhtaEFKRzBjUlhpMHhXbUE9PQ%3D%3D--cf3f8a4eaa2c6c53fc7b2f73f97a5cc2e9b7edcf; path=/; HttpOnly
X-Request-Id: 0de84a21-****-****-****-c4e2d
X-Runtime: 0.004671

nginxのエラーログを見るときは

sudo less /var/log/nginx/error.log

nginxの設定変更するには

sudo vi /etc/nginx/nginx.conf

cd /etc/nginx/conf.d/

sudo vim アプリ名.conf

sudo vi etc/nginx/conf.d/アプリ名.conf

#再起動して設定を反映するコマンド

sudo nginx -s reload

nginxのプロセスidを見るには

sudo lsof -i | grep nginx

アプリのエラーログを見るには

sudo less /var/www/アプリ名/log/nginx.error.log

EC2に接続したらアプリ直下に移動

cd /var/www/アプリ名/

nginxを再起動するには

sudo service nginx restart

pumaを停止するには

bundle exec pumactl stop

pumaを起動するには

bundle exec pumactl start

Pumaの設定変更するには

vim /var/www/アプリ名/config/puma.rb

②デプロイしてからJSやSCSSを直した後にすること

プリコンパイルするには

bundle exec rake assets:precompile RAILS_ENV=production

Pumaを再起動する

bundle exec pumactl stop

bundle exec pumactl start

Pumaを起動するコマンド/var/www/アプリ名/config/puma/productionに設定ファイルを書き込んでいる場合

bundle exec rails s -e production

AWS+Route53+お名前.com+LBでHTTP→HTTPSにするには?2021年4月版(1)

AWS×お名前.com×Route53で独自ドメインのサイトを作ったがHTTPSにしたい

まず、そもそもなぜSSL化をする必要があるのか?

・SSL化するとそのサイトのデータの通信が暗号化される

・Googleや国がSSL化を推奨している(SEO対策にもなる)

1:サービスからACMで検索してCertificate Managerを選びます。

2:証明書のリクエストをクリックします。

3:証明書のリクエストをクリックします

続きを読む

HerokuのDBの再構成方法・他Herokuエラー対処録

pgでやる場合

本番環境のDB変更の手順を忘れないように残しておきます。

※学習用ならいいのですが他の用途だとDBの再構築は非推奨です

① DBのリセット

heroku pg:reset DATABASE_URL

コマンドを実行すると
>
↑で画面が止まるのでアプリ名を入れます。

② マイグレーション(再構築)コマンド

heroku run rake db:migrate

③ Herokuの再起動コマンド

heroku restart --app APP_NAME

migrateした後に再起動しないとエラーが出る時があるらしいので下記を実行。[APP_NAME]をアプリ名に変える。

④ データseedsを投入するコマンド

heroku run rails db:seed

Failed to install gems via Bundlerと出たときの対処法

bundle lock --add-platform x86_64-linux

git add -A 

git commit -m "Gemfile.lockを修正" 

git push heroku main

You must use Bundler 2 or greater with this lockfile.と出たときの対処法

解決策

Gemfile.lockを削除します。

rm Gemfile.lock

アプリ本体にインストールされているgemも削除します。

rm -rf vendor/bundle

バージョン2以上のbundlerをインストール

gem install bundler -v '2.2.17'
bundle install

bundlerを旧バージョンに合わせる方法

gem install bundler -v 2.2.17 
rm -rf Gemfile.lock 
bundle _2.2.17_ install

GitHubに芝を生やす方法

GitHubに結構コミットしているのに全然反映されていない時

git config user.email

gitコマンドに紐づいているアドレスを確認しよう。

GitHubのSettingsから左のサイドバーのEmailsで

登録しているメールアドレスがわかるので

git config user.email メールアドレス

で変更して↓のコマンドで反映されているか確認

git config user.email

GitHubで芝が生えていたらOK

Docker+Railsで開発するときのメモ(自分用メモ)

忘れた時用にDockerを用いた開発のやり方の手順を記載します。

前提:Docker Desktopをインストールしている(OSはMac)
Rubymineで開発している。(VScodeでもできました)
Dドライブ内に作業フォルダ(アプリ名)などを置いている。

  1. Docker.appを起動する(Docker desktop)
  2. RubyMineを起動する(VScodeでもOK)
  3. cdでアプリの作業用フォルダへ移動 例:cd /Volumes/D/アプリ名
  4. docker-compose buildでコンテナを構築する
  5. Could not find rake-13.0.1 in any of the sources Run `bundle install` to install missing gems.というエラーが出た時は↓
  6. docker-compose stopをしてからdocker-compose downでコンテナを削除
  7. Gemfile.lockの記述をすべて削除してから
  8. docker-compose buildでコンテナをまた構築する
  9. docker-compose upでサーバー起動します。
  10. Unknown databaseと出てしまったときは以下のコマンドでデータベースを作成します。
  11. docker-compose exec web bundle exec rake db:create
  12. docker-compose exec web bundle exec rake db:migrate

以上です。

PaizaCランクLvアップ問題集(Ruby)

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

問題1 数字の文字列操作(時刻2)

時刻を表す長さ 5 の文字列 S が “XX:XX” の形式で与えられます。与えられた時刻の 30 分後の時刻を同じ形式で出力してください。

1 行目に文字列 S が与えられます。
S は “XX:XX” という形をしており、 “:” の左側は時を、右側は分を表します。時や分が一桁である場合、十の位は 0 で埋められます。また、 00:00 から 23:59 までの 24 時間表記を採用しています。

入力例1
01:02
出力例1
01:32
入力例2
12:31
出力例2
13:01

解答  入力例1で解説

  1. 入力された時刻を受け取る(数値としてこのとき:は消える)
  2. hは1が入っている
  3. mには2が入っている
  4. mに30を加算する
  5. 条件分岐でmが60以上のとき、mに−60して、hを1増やす
  6. hとmを文字列に変換する
  7. hとmが一桁の時に”01″となるように’0’を追加する
  8. hとmの間に:をつけて出力する
s = gets.split(':').map(&:to_i)
h = s[0]
m = s[1]
m += 30
if m > 59
  m -= 60
  h += 1
end

h = h.to_s
m = m.to_s

h = '0' + h if h.size == 1
m = '0' + m if m.size == 1

puts h + ':' + m

問題  文字列(工事)

工事がN週間続く
各週日曜日の工事が始まる時刻と、
工事が何時間何分続くのかに関する情報が与えられるので、
工事が終わる時刻を00:00から23:59までの24時間表記で出力してください
工事がh時入力は以下のフォーマットで与えられます。

入力される値

N(工事が続く週の数を表す整数)
t_1 工事が始まる時間
h_1 工事が続く時間
m_1 工事が続く分
半角スペース区切りで与えられます。

t_iは24時間表記の時刻を表す文字列で、”AB:XY”という形をしており、これはAB時XY分を表す。
今回は00:00〜23:59までの24時間表記を採用し、時・分を表す数字が1桁の場合には十の位を0で埋めます。
入力値最終行の末尾に改行が1つ入ります。
t_N h_N m_N間m分続くとした場合、工事が始まった時刻のh時間m分後を指します)。

各週の工事が終わる時刻をN行出力してください。
時や分を表す数字が1桁の場合には十の位を0で埋めてください。たとえば24時は00:00、27時は03:00となります。

入力例2
2
15:59 0 1
23:20 1 0
出力例2
16:00
00:20

解答

  1. 入力Nを受け取る
  2. N回繰り返したいのでn.times
  3. 変数t, a_h, a_mにそれぞれ文字列を代入していく
  4. 変数h, mに時刻の部分の:で分割して数値を代入する。
  5. a_hとa_mを数値に変換して自己代入する
  6. mにa_m, hにa_hを加算する
  7. 条件分岐でmが60以上のとき、mに−60して、hを1増やす
  8. hが24以上のときhを−24する
  9. hとmを文字列に変換する
  10. hとmが一桁の時に”01″となるように’0’を追加する
  11. hとmの間に:をつけて出力する
n = gets.to_i

n.times do
  t, a_h, a_m = gets.split(' ')
  h, m = t.split(':').map(&:to_i)
  a_h = a_h.to_i
  a_m = a_m.to_i

  m += a_m
  h += a_h
  if m > 59
    m -= 60
    h += 1
  end
  h -= 24 if h > 23

  m = m.to_s
  h = h.to_s
  m = '0' + m if m.size == 1
  h = '0' + h if h.size == 1

  puts h + ':' + m
end

※ポイント

a, b, c = 長さ3の配列 のように書くと a, b, c に 長さ3の配列 の要素が先頭から順に代入される

たとえばa, b, c= [1, 2, 3]と書くと a に 1 が、b に 2 が、c に 3 がそれぞれ代入される。

配列の長さと同じ数の変数を左辺に用意する必要があります。

日付を跨ぐ場合、h > 23 のときh -= 24を実行する

h の長さが 1 であるとき、h の先頭に 0 を付ける
m の長さが 1 であるとき、m の先頭に 0 を付ける

先に分の方の計算を先にすること!

m > 59 の操作で h > 23 になる可能性があるため。

Docker(新規コントローラーの作成とコントローラーの削除)

Dockerでのコントローラ作成方法(コントローラは複数形で)

docker-compose exec web rails g controller tasks create destroy

ビューファイルを生成したくない時(–skip-template-engine: ビューファイルをスキップする設定)

docker-compose exec web rails g controller macs create destroy --skip-template-engine

コントローラーを削除したいとき

docker-compose exec web rails destroy controller tasks

 

 

ポートフォリオをデプロイしたときのEC2の設定1(EC2+RDS+NGINX+Puma)

ポートフォリオをAWSのEC2にデプロイした時にやったこと

EC2を作成

無料利用枠で作成する詳しくは

0:EC2に接続する

EC2の接続から例:の部分をコピーしてターミナルで行う。

ssh -i "EC2の秘密鍵.pem" ec2-user@自分のElasticIPアドレス

1:ユーザーとパスワードを作成する

sudo adduser newuser

sudo passwd newuser

2:root権限を付加(rootの↓に追加します)

sudo visudo

root   ALL=(ALL)    ALL
newuser   ALL=(ALL)    ALL

3:今作ったユーザーを変更

続きを読む