트러블슈팅 일기

2881바이트

근래 반 년이나 될까, 하여간 몇 달에 걸쳐 취미 또는 업무 상으로 크고 작게 헤맸던 것들이다.

코틀린에서의 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인가 할 때 컨테이너가 떴던 것 같다. 눈치를 보니 마운트가 안 되어 있어서 컨테이너 안에서 못 찾나보다. 프로젝트 루트 경로를 마운트(../..:../..)하는 식으로 해주니 해결되었다.