学習記録

2020-02-09に作成

個人用の学習記録。成果がなくとも毎日更新。

所有者限定モードのためこのボードには投稿できません ボードとは?

Ruby on Rails 6 実践ガイド

layoutメソッドって?

デフォルトではapplication.html.erbがレイアウトとして指定されている。
このメソッドを使うことで、(渡された文字列).html.erbなどのファイルに切り替えることができる。

参考

layoutメソッドについてまとめる!


Ruby

つまずいた点

hoge and next if conditionとは書けない。next hoge if conditionのように書く。

参考

How to use next with inject in ruby


Ruby on Rails 6 実践ガイド

application.rb

  • タイムゾーンの設定
    • config.time_zone = 'Tokyo'
  • 国際化のためのパス設定
    • config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
  • デフォルト言語を日本語に指定
    • config.i18n.default_locale = :ja

3.5.5BlockedHostsの設定

アクセスに使用できるホスト名を追加する。

config.hosts << 'example.com'

4.1.3RSpecの初期設定

  • example "OOの追加"や it "appends a OO"のような書き方がある。
  • # はインスタンスメソッドであることを表す。
  • 複数のエク斬プルを実行する場合、実行順序は決まっていない。
  • pendingメソッドとxexampleメソッドの2通りがある。

Ruby on Rails 6 実践ガイド

db:resetとdb:setupの違い

README.mdを読んでいてrails db:resetとrails db:setupの違いが気になったので、下記のリンクを参考にした。
rails db:reset、rails db:migrate:reset、rails db:setupの違い
- db:setupではcreate + schema:load+ seed
- db:migrate:reset と db:reset は異なる。
- ダミーデータが作られるかどうか。

参考

rake db:migrateとrake db:schema:loadの違い
- migrationファイルでなくschema.rbがベースになる


PaizaのB問をRubyで解いた時に調べたこと


noticeで表示されるメッセージに改行を入れたい

調査

実装

redirect_to(notice: ['message1', 'message2'])
<%= safe_join(notice, tag(:br)) unless notice.nil? %>

git push -u の-uって何

"git push" に "-u" あるいは "--set-upstream" を付けると、push 先のブランチをトラック (デフォルトで push や pull の対象に) するように設定されます。
引用元:【Git】リモートにブランチを push してそのままトラックする

調査

  • https://git-scm.com/docs/git-push#Documentation/git-push.txt---set-upstream

GithubのプライベートリポジトリにDependabotからの通知が来ない。

パブリックリポジトリにはGemのバージョンアップの通知が来るのに何故だろうと思った。

調査

「Dependabot alerts private repository」で検索した結果
条件の中に「enabled read-only analysis by GitHub, dependency graph, and vulnerability alerts」とある。
親切にも操作手順まで書いてあった。


「Bundler が Ruby 2.7 で変な件」が私の環境でも起こる件

railsコマンドを入力するたびに警告が出ていたのを放置していたので、対処してみた。

調査

下記の警告のメッセージを丸々コピペしてググる。
"the running version of Bundler (2.1.2) is older than the version that created the lockfile (2.1.4). We suggest you to upgrade to the version that created the lockfile by running"
Bundler が Ruby 2.7 で変な件が検索結果に出た。
唯一の日本語記事なので、まずこれを参考にしてみた。
記事にある事象と自分の環境を比較してみる。
$ bundle -v
Bundler version 2.1.4


$ gem list bundler
*** LOCAL GEMS ***
bundler (2.1.4, default: 2.1.2)


p Bundler::VERSION
"2.1.2"


対処

$ gem update --system 3.0.8 && gem update --system

対処後

対処したことで警告は出なくなったが、
バージョンの表示はこれで良いのか?

p Bundler::VERSION
"2.1.2"


$ gem list bundler
*** LOCAL GEMS ***
bundler (default: 2.1.4)

bundle checkで警告が出る

$ bundle check
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
The Gemfile's dependencies are satisfied

参照:bundle installする際のtzinfo-dataのwarningがウザい
「UnixベースのOSではtzinfoからシステムのタイムゾーン情報に直接アクセスできるので、このgemを入れる必要はないそう。」という言葉を鵜呑みにするなら、下記の行をコメントアウトするのみ。

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

期待通りエラーは出なくなった。


今日調べたこと

1台のEC2でもELBを使うメリット

疑問

【初心者向け】AWSのサービスを使ってWebサーバーをHTTPS化する
を読んでいたところ、LBを設置する意図を知らない(負荷分散のイメージしかない)ことに気づいた。

検索

Google検索で「load balancer 1台しかない」とかいうキーワードを入れたところ、運よく下記の記事が候補に出た。
1台のEC2でもELBを使うメリットについてまとめてみました
ELBのありがたい点を下記にピックアップ。
- DNSの変更を行うことなく、バックエンドの切り替えが可能
- ELBのヘルスチェックを利用してWEBサーバの死活監視ができる
- SSLの管理をAWSにオフロードできる(オフロードって何だ)
- ELBを利用すればACMの無料SSL証明書が利用でき、また証明書の更新は自動で行われる。

ヘルスチェックって何

  • サーバーからのレスポンスのコードが期待通りかどうかを確認するような機能らしい。Ping Pathへのリクエストの結果で判断しているらしい。
    参考:https://norm-nois.com/blog/archives/3017
  • ヘルスチェックといってもELBとRoute 53で異なるものを指す。
    参考:https://dev.classmethod.jp/articles/health-check-spec-elb-route53/

つまずいた点

  • Rubyでは変数に全角文字を使うことができるということを知らず、バグの解決が遅れた。

Pythonでつくる対話システム

3-4-4で調べたこと

OpenNMT-pyのパラメタの説明
https://opennmt.net/OpenNMT-py/options/translate.htmla

colabで直接動かすので、コマンドライン引数でなくargparseへ直接渡したい。
Jupyter lab / notebookで argparseそのままで実行する方法

学習したモデルはGoogle Driveに置かれているので、
cliからファイルを取得させたい。
wget/curl large file from google drive


Pythonでつくる対話システム

3-4-4

learn_generative_model.ipynbに書いてある通りに動かすと、
エラー「torchtext.so: undefined symbol」で止まる。
OpenNMT-pyのinstallationに従っておけば良さそう。
参考:https://github.com/OpenNMT/OpenNMT-py#requirements


Railsチュートリアル2周目

つまずいた点

fixtureのymlファイルにインデントをつけるとエラーでテストが失敗するようになった。


Railsチュートリアル2周目。
RSpecの勉強も始めた。

【Rails】はじめてのRSpec!テストコードを書こう!

つまずいた点

事象

テストを実行したところテスト結果がREDになる。

Failures:
  1) FoodEnquete 入力項目の有無 必須入力であること お名前が必須であること
     Failure/Error: expect(new_enquete.errors[:name]).to include(I18n.t('errors.message.blank'))
       expected ["を入力してください"] to include "translation missing: ja.errors.message.blank"
     # ./spec/models/food_enquete_spec.rb:42:in `block (4 levels) in <top (required)>'

対処

下記の文を追加したところテスト結果がGREENになった。

rspec-testcode-sample/2章/config/locales/views.ja.yml

  errors:
    message:
      blank: "を入力してください"

疑問

下記のサイトを参考に対処したが、deviseとは何だろう。
自分の環境にはdeviseもrails-i18nも入っていないと思うが、どう実装されているのかわからない。
https://poinorou.hatenablog.com/entry/2019/09/16/090336


Railsチュートリアル勉強中

14.2.6 フォローをテストする

つまずいた点

演習14.2で期待したエラーが生じなかった。
原因:Guardfileの設定を忘れていた。保存するファイルによって実行するテストが違うことに気づかなかった。