diff --git a/local-dev/_diag.sh b/local-dev/_diag.sh new file mode 100755 index 0000000..bfcbcb8 --- /dev/null +++ b/local-dev/_diag.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +ssh -o BatchMode=yes -o ConnectTimeout=15 aidev@chatbot.exdev.co.kr 'bash -s' <<'EOSSH' +export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/Applications/Docker.app/Contents/Resources/bin:$PATH" +echo "=== listening ports ===" +for p in 16000 16001 16002 27017 1521 28012 28013 8086 8083 8092 443; do + if lsof -iTCP:$p -sTCP:LISTEN >/dev/null 2>&1; then echo "UP :$p"; else echo "DOWN :$p"; fi +done +echo "=== docker ps ===" +docker ps --format '{{.Names}}\t{{.Status}}' 2>&1 | head -20 +echo "=== docker compose plugin ===" +docker compose version 2>&1 | head -2 +echo "=== public-ai timestamp ===" +ls -la /Users/aidev/dev/exAichatbot_agent/chatbotApp-chatbot2.0-agent/public-ai/index.html 2>/dev/null || echo "(missing)" +echo "=== HTTPS UI ===" +curl -s -o /dev/null -w 'https=%{http_code}\n' -m 10 https://chatbot.exdev.co.kr/chatbot/ai/ 2>&1 +EOSSH diff --git a/local-dev/bin/rsync b/local-dev/bin/rsync index e06c35d..7fe4620 100755 --- a/local-dev/bin/rsync +++ b/local-dev/bin/rsync @@ -103,7 +103,9 @@ REMOTE_PATH="${REMOTE_PATH%/}" TAR_EXCLUDES=() for pat in "${EXCLUDES[@]}"; do - TAR_EXCLUDES+=(--exclude "${pat}") + # tar 의 --exclude 는 'node_modules/' 처럼 슬래시로 끝나면 디렉터리에 매칭되지 않는다. + # (rsync 문법 그대로 넘기면 node_modules 가 통째로 전송돼 메모리 부족으로 죽는다) + TAR_EXCLUDES+=(--exclude "${pat%/}") done ssh -o BatchMode=yes "${HOST}" "mkdir -p '${REMOTE_PATH}'" diff --git a/local-dev/fix_and_start.sh b/local-dev/fix_and_start.sh new file mode 100755 index 0000000..bd8faac --- /dev/null +++ b/local-dev/fix_and_start.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/Applications/Docker.app/Contents/Resources/bin:/usr/bin:/bin:/usr/sbin:/sbin" +cd /Users/aidev/dev/exAichatbot_agent + +git config core.autocrlf false +git config core.eol lf + +python3 - << 'PYEOF' +import os +for d in ['kakaoChatbotSkill-chatbot2.0-agent','chatbotApi-chatbot2.0-agent']: + f = d+'/gradlew' + if os.path.exists(f): + data=open(f,'rb').read().replace(b'\r\n',b'\n').replace(b'\r',b'\n') + open(f,'wb').write(data) + os.chmod(f,0o755) + print('fixed:', f) +PYEOF + +bash server-dev/start-all-server.sh --no-pull --no-push --skip-desktop diff --git a/server-dev/sync-submodules-rsync.sh b/server-dev/sync-submodules-rsync.sh index 6240ec6..ef41693 100755 --- a/server-dev/sync-submodules-rsync.sh +++ b/server-dev/sync-submodules-rsync.sh @@ -61,4 +61,20 @@ if [[ -d "${ROOT_DIR}/chatbotApp-chatbot2.0-agent/public-ai" ]]; then "${EXDEV_SSH}:${REMOTE_WT}/chatbotApp-chatbot2.0-agent/public-ai/" fi +# Windows 체크아웃(core.autocrlf)에서 넘어온 CRLF 는 macOS 에서 +# "/bin/sh^M: bad interpreter" 로 죽는다. 전송 후 실행 진입점만 LF 로 강제한다. +log "원격 실행 스크립트 LF 정규화..." +ssh -o BatchMode=yes "${EXDEV_SSH}" "bash -s" </dev/null) \ + \$(find "\${WT}" -name '*.sh' -not -path '*/node_modules/*' 2>/dev/null); do + if head -c 4000 "\$f" | grep -q \$'\r'; then + tr -d '\r' < "\$f" > "\$f.lf" && mv "\$f.lf" "\$f" + echo " LF 변환: \$f" + fi + chmod +x "\$f" 2>/dev/null || true +done +EOSSH + log "✅ submodule rsync 완료"