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
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]
期待通りエラーは出なくなった。
今日調べたこと
【初心者向け】AWSのサービスを使ってWebサーバーをHTTPS化する
を読んでいたところ、LBを設置する意図を知らない(負荷分散のイメージしかない)ことに気づいた。
Google検索で「load balancer 1台しかない」とかいうキーワードを入れたところ、運よく下記の記事が候補に出た。
1台のEC2でもELBを使うメリットについてまとめてみました
ELBのありがたい点を下記にピックアップ。
- DNSの変更を行うことなく、バックエンドの切り替えが可能
- ELBのヘルスチェックを利用してWEBサーバの死活監視ができる
- SSLの管理をAWSにオフロードできる(オフロードって何だ)
- ELBを利用すればACMの無料SSL証明書が利用でき、また証明書の更新は自動で行われる。
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
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の勉強も始めた。
テストを実行したところテスト結果が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
演習14.2で期待したエラーが生じなかった。
原因:Guardfileの設定を忘れていた。保存するファイルによって実行するテストが違うことに気づかなかった。
memberメソッドを使うとURLにはidが含まれる。
idを含めたくない場合、collectionメソッドを代わりに使う。
下記のようにテストを書いていたが、count.to_sと書かないと期待通りにテストされない。
assert_match followers.count, response.body
13.4.3 画像のリサイズ
アップロードされた画像を表示する前にサイズを変更するが、
テストでは画像のリサイズを行わないようにする。
config/initializersディレクトリ下にはアプリ起動時に実行される。
参考:https://teratail.com/questions/63578
リスト13/59でmicropost.rbに「mount_uploader :picture, PictureUploader」を追記し、
チュートリアル通りにテスト結果がGREENになることを期待していた。
しかし、テスト結果にエラー「NoMethodError: undefined method `picture_will_change!'」と出る。
rails g migrationと入力するべきところをmigrationの部分を入力し忘れていた。
出力結果に「Could not find generator 'add_picture_to_microposts'. 」と出ていたのを確認していなかった。
参考:https://teratail.com/questions/215421
ログインしていない場合にマイクロポストが操作できないことをテストで確認。
Usersコントローラではlogged_in_userを使っていたが、このメソッドをMicropostsコントローラからも扱いたいのでメソッドの定義を移動させる。
マイクロポストを全件表示すると件数と処理時間の面で問題がある。
10章と同様にwill_paginateメソッドを使い、ページで分割して表示する。
10章と異なる点としてwill_paginateに渡す引数がある。
Usersコントローラにおいて、@users変数が存在していれば引数は不要。
本節ではUsersコントローラにおいて、@microposts変数を明示的に渡す。
Herokuにデプロイ後、メールが送信されることを試そうとした。
結果はエラー "Authentication failed: account disabled"
HerokuかSendgridに問い合わせると良さそうだが、この対処は後回しにする。
演習2の「redirect_to root_url and return unless FILL_IN」が分からなかったので下記のリンク先で勉強した。
素人による "and return unless"