mmag

ハマったことメモなど

BOLG依存パッケージアップデート業 2022/09/18

ちょっと前にdependabotを入れたせいで(おかげで)大丈夫そうならポチポチアップデートしてしまっており、しばらくこのシリーズも書いてないことに気づいたので、今朝来ていたdependabot PR2つだけ書いておく。

logger_json

https://github.com/Nebo15/logger_json/compare/5.0.0...5.1.0

jason

https://github.com/michalmuskala/jason/releases/tag/v1.4.0

  • io_lib_format.fwrite_g/1をやめて:erlang.float_to_binary(_, [:short])を使うように変更
    • メモリ消費が減るなどパフォーマンスが結構改善するらしい

BOLG依存パッケージアップデート業 2022/07/30

API

Dependency         Current  Latest  Status
credo              1.6.4    1.6.5   Update possible
ecto_sql           3.8.3    3.8.3   Up-to-date
ex_aws             2.3.3    2.3.3   Up-to-date
ex_aws_s3          2.3.3    2.3.3   Up-to-date
gettext            0.19.1   0.20.0  Update possible
hackney            1.18.1   1.18.1  Up-to-date
id_token           0.2.1    0.2.1   Up-to-date
jason              1.3.0    1.3.0   Up-to-date
joken              2.5.0    2.5.0   Up-to-date
logger_json        5.0.0    5.0.0   Up-to-date
mock               0.3.7    0.3.7   Up-to-date
new_relic_agent    1.27.7   1.27.7  Up-to-date
oban               2.12.1   2.13.0  Update not possible
phoenix            1.6.10   1.6.11  Update possible
phoenix_ecto       4.4.0    4.4.0   Up-to-date
phoenix_pubsub     2.1.1    2.1.1   Up-to-date
plug               1.13.6   1.13.6  Up-to-date
plug_cowboy        2.5.2    2.5.2   Up-to-date
postgrex           0.16.3   0.16.4  Update possible
scrivener_ecto     2.7.0    2.7.0   Up-to-date
scrivener_headers  3.2.2    3.2.2   Up-to-date
sitemapper         0.6.0    0.6.0   Up-to-date

credo

Changelog

  • Credo.Check.Readability.LargeNumbersのメッセージにonly_greater_thanの値を追加
  • Phoenix.LiveViewのモジュールはデフォルトで無視
  • 以下のfalse positiveを修正
    • Credo.Check.Refactor.Apply
    • Credo.Check.Refactor.NegatedIsNil
    • Credo.Check.Readability.WithSingleClause

gettext

Changelog

  • 同じ引数でgettext_commentを何度も呼べるように修正
  • POファイルへのフラグのダンプを参照のダンプの後へ移動
  • compile.gettextをdeprecated
  • 非互換
    • handle_missing_translation(locale, domain, msgid, bindings)コールバックの引数に1つ追加
      • handle_missing_translation(locale, domain, msgctxt, msgid, bindings)
    • handle_missing_plural_translation(locale, domain, msgid, msgid_plural, n, bindings)コールバックに引数1つ追加
      • handle_missing_plural_translation(locale, domain, msgctxt, msgid, msgid_plural, n, bindings)

非互換な変更の影響は受けてないので上げてよし。

oban

Release v2.13.0 · sorentwo/oban · GitHub

  • ジョブの戻り値に{:cancel, reason}追加。{:discard, reason}はSoft deprecatedになるけど、使ってないので上げてよし。

phoenix

Changelog

JSクライアントの変更のみ。上げてよし

postgrex

Changelog

  • PGHOSTUNIXソケット対応
  • PostgreSQL 14+のintegerとdecimalでInfinityに対応
  • Table.Readerメタデータにcount追加
  • Elixir v1.15のWarningsに対応

上げてよし。

frontとdashboard

 @types/jest                 ^27.4.1  →   ^28.1.6
 @types/node                ^16.11.7  →   ^18.6.2
 @types/react                ^18.0.7  →  ^18.0.15
 @types/react-dom            ^18.0.0  →   ^18.0.6
 @typescript-eslint/parser   ^5.21.0  →   ^5.31.0
 eslint                      ^8.14.0  →   ^8.20.0
 eslint-config-next           12.1.5  →    12.2.3
 jest                        ~27.5.1  →   ~28.1.3
 prettier                     ^2.6.2  →    ^2.7.1
 sass                        ^1.51.0  →   ^1.54.0
 ts-jest                     ^27.1.4  →   ^28.0.7
 typescript                   ^4.6.3  →    ^4.7.4
 next                        ^12.1.5  →   ^12.2.3
 react                       ^18.0.0  →   ^18.2.0
 react-dom                   ^18.0.0  →   ^18.2.0

 @nuxtjs/composition-api            ^0.32.0  →  ^0.33.0
 @nuxtjs/eslint-config-typescript    ^6.0.1  →  ^10.0.0
 @nuxtjs/eslint-module               ^3.0.2  →   ^3.1.0
 @pinia/testing                     ^0.0.11  →  ^0.0.13
 @types/jest                       ^26.0.23  →  ^28.1.6
 @vue/test-utils                     ^1.3.0  →   ^2.0.2
 eslint                             ^7.32.0  →  ^8.20.0
 eslint-plugin-nuxt                 >=2.0.0  →  >=3.2.0
 eslint-plugin-prettier              ^4.0.0  →   ^4.2.1
 jest                               ^26.6.3  →  ^28.1.3
 nodemon                            ^2.0.15  →  ^2.0.19
 prettier                            ^2.6.0  →   ^2.7.1
 sass                               ^1.49.9  →  ^1.54.0
 sass-loader                        ^10.1.0  →  ^13.0.2
 ts-jest                            ^26.5.6  →  ^28.0.7
 ts-node                            ^10.7.0  →  ^10.9.1
 @pinia/nuxt                         ^0.1.8  →   ^0.3.1
 express                            ^4.17.3  →  ^4.18.1
 express-session                    ^1.17.2  →  ^1.17.3
 firebase                            ^9.6.9  →   ^9.9.1
 http-proxy-middleware               ^2.0.4  →   ^2.0.6
 pinia                              ^2.0.13  →  ^2.0.17
 redis                               ^4.0.4  →   ^4.2.0
 vee-validate                       ^3.4.14  →   ^4.6.2

サボりがちになっていて溜まっており、大変ダルい。minorアプデはポイポイ入れていきます...。

PostgreSQLでpublic以外のスキーマをつくって使う

dev.classmethod.jp

という記事を見かけたのが発端。いままで特に深く考えずにpublicスキーマの世界で生きていたんだけど、ユーザごとにスキーマつくって権限あげるのがお行儀いいよな、と思ってやってみた。

-- init.sql

CREATE DATABASE mydb TEMPLATE='template0' ENCODING='UTF8' LC_CTYPE='C' LC_COLLATE='C';
\c mydb;

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE mydb FROM PUBLIC;

CREATE ROLE readwrite;
CREATE SCHEMA myschema;
GRANT CONNECT ON DATABASE mydb TO readwrite;
GRANT USAGE, CREATE ON SCHEMA myschema TO readwrite;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA myschema TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO readwrite;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA myschema TO readwrite;
ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT USAGE ON SEQUENCES TO readwrite;

CREATE USER myuser WITH PASSWORD 'myuserpassword';
GRANT readwrite TO myuser;

これをやるとmydbmyschemaで生きるmyuserさんができる。CREATE DATABASEはローカルと本番でできたりできなかったりすると思うのでその辺りはよしなに。開発環境のDockerイメージでは/docker-entrypoint-initdb.d以下に置いておくと初回に実行してくれる。volumeのある状態だと実行されないので、一度失敗したらdocker compose down --volumesなどしないといけないことに注意。

db:
  image: postgres:14
  environment:
    POSTGRES_PASSWORD: postgres
  ports:
    - 5432:5432
  volumes:
    - db-volume:/var/lib/postgresql/data
    - ./init.sql:/docker-entrypoint-initdb.d/init.sql # <- 追加

Ecto

ついでにEctoでどうやって繋ぎに行くか書いておきます。

# /config/dev.exs

config :my_app, MyApp.Repo,
  username: "myuser",
  password: "myuserpassword",
  hostname: "db",
  database: "mydb",
  stacktrace: true,
  show_sensitive_data_on_connection_error: true,
  pool_size: 10,
  migration_default_prefix: "myschema", # <- 1
  after_connect: {Postgrex, :query!, ["SET search_path TO myschema", []]} # <- 2
  • migration_default_prefixをつくったスキーマに指定
  • after_connectsearch_pathをつくったスキーマに指定

の2つ。前者はマイグレーションのときの話で、後者はアプリケーションが起動してSELECTとかINSERTとかするときの話。マルチテナンシーとかやろうとすると細かく設定したいので、マイグレーション実行毎、マイグレーションファイル毎、Ecto.Schema毎、クエリ毎に指定することもできるけど、今回の話はpublicやめようねというだけなので割愛。

mix ecto.migrateの後にmyschemaにテーブルができていることが確認できたらOK。

$ psql -h localhost -Upostgres -d mydb
Password for user postgres:
psql (14.3, server 14.4 (Debian 14.4-1.pgdg110+1))
Type "help" for help.

mydb=# \dp myschema.*
                                      Access privileges
    Schema    |        Name        | Type  | Access privileges | Column privileges | Policies
--------------+--------------------+-------+-------------------+-------------------+----------
 myschema     | users              | table |                   |                   |
(1 rows)

参考