트러블슈팅 일기
근래 반 년이나 될까, 하여간 몇 달에 걸쳐 취미 또는 업무 상으로 크고 작게 헤맸던 것들이다.
코틀린에서의 vararg
람다
코틀린의 람다는 가변 인자를 가질 수 없다. 최소한 내가 했을 때엔 그랬다. 대신 fun interface
로 우회하면 된다.
fun interface F {
operator fun invoke(vararg xs: Int)
}
fun main() {
val f = F { xs -> println(xs.toList()) }
f(1, 2, 3, 4)
}
druid에서의 K8s discovery
Pod에 달아주는 거였던가, 메모를 똑바로 안 해놨다. 아무튼 pod인지 무슨 리소스에 달리는 annotations
가 빈 객체여서는 안 된다. 최소한 더미 키가 하나라도 있어야 한다.
annotations: {} # 제대로 동작하지 않음
annotations:
k8s-discovery: true # 실제로는 사용되지 않더라도 삽입한 값
다른 PS 스크립트에 인자 포워드
Pester로 테스트를 작성하는데, 함수를 선언해서 임포트하는 경우가 아니라 스크립트 자체가 cmdlet인 경우를 테스트하고 싶었다. 그런데 인자를 어떡하나? $args
로 비틀어 보았는데 제대로 안 된다. 동적 인자까지도 써보는데, 잘 안 될 뿐더러, 이렇게까지 돌아가는 경우는 보통 쎄한 예감이 들게 마련이다. 난리 부르스를 추다가, Set-Alias
를 써서 너무나도 허무하게 해결해버렸다.
Supabase 함수 배포
다른 코드는 npm 워크스페이스로 해서 packages/
아래에 두었고, Supabase Edge Functions에 의존적인 코드만 딱 supabase/functions/
에 두어 관리하고 싶다. 그런데 배포 시에 자꾸 packages/
에 있는 모듈을 임포트하지 못해 오류가 난다. deno compile
도 잘 되는데 Supabase CLI가 아무래도 supabase/functions/
밖에 있는 코드를 인식하지 못하는 것 같다. 이것도 삽질을 주구장창 하다 보니, Deno 임포트 맵을 file:///:/
로 줘 보았더니 Docker mount 오류가 떨어진다. 아, supabase init
인가 할 때 컨테이너가 떴던 것 같다. 눈치를 보니 마운트가 안 되어 있어서 컨테이너 안에서 못 찾나보다. 프로젝트 루트 경로를 마운트(../..:../..
)하는 식으로 해주니 해결되었다.