Fabric: c. ๋กœ์ปฌ์—์„œ ๋ฌธ์ž์—ด ๋Œ€ ํŒŒ์ผ๋ฅ˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํ˜ผ๋™

์— ๋งŒ๋“  2018๋…„ 05์›” 14์ผ  ยท  6์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fabric/fabric

transfer.put() docs ์— ๋”ฐ๋ฅด๋ฉด ํŒŒ์ผ์— ๋Œ€ํ•œ ๋กœ์ปฌ ๊ฒฝ๋กœ(๋ฌธ์ž์—ด) ๋˜๋Š” ํŒŒ์ผ๋ฅ˜ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ „์ž(๋ฌธ์ž์—ด)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ remote ๊ฒฝ๋กœ์— ๋Œ€์ƒ ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ผ๋ถ€ ์˜ˆ ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

c.put('myfiles.tgz', '/opt/mydata')

๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ( c.put('file.txt', '/home/me/dir') , ์‹ค์ œ๋กœ local ๊ฒฝ๋กœ๊ฐ€ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ IOError: Failure ๋๋‚ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์ด ์•„๋‹™๋‹ˆ๋‹ค.

ํŠนํžˆ paramiko.transport.sftp.sftp._log: [chan 0] open('/home/me/dir', 'wb') ์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜์€ ํ•ญ์ƒ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

c.put('file.txt', '/home/me/dir/file.txt')

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋ฌธ์„œ ๋ฐ ์˜ˆ์ œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ $HOME ๋Œ€ํ•œ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒ์ ์ด์ง€ ์•Š์ง€๋งŒ ์ด๋ฏธ #1653์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Windows 10์—์„œ ํ…Œ์ŠคํŠธ๋จ
  • ํŒจ๋ธŒ๋ฆญ 2.0.0
  • ํŒŒ๋ผ๋ฏธ์ฝ” 2.4.1
  • 1.0.0 ํ˜ธ์ถœ
Bug Wart put()/get()

๋ชจ๋“  6 ๋Œ“๊ธ€

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? Connection.put remote ๋ฅผ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ IOError ํ•ฉ๋‹ˆ๋‹ค.

(๋˜ํ•œ Fabric et al์— ๋Œ€ํ•œ ๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!)

ํŒจ๋ธŒ๋ฆญ 2.1.3
ํŒŒ๋ผ๋ฏธ์ฝ” 2.4.1
1.0.0 ํ˜ธ์ถœ

ํ•ฉ๋ฒ•์ ์ธ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋‹ˆ ๋‚˜์ค‘์— ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒจ์น˜(๋ฐ ํ…Œ์ŠคํŠธ! ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ํ†ต๊ณผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—:(์šฐ๋ฆฌ๊ฐ€ ์ผ๋ถ€๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Œ์„ ์•”์‹œํ•˜๋Š”...)๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ด๊ฒƒ์„ ๋ณด๋ฉด ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ FLO์˜ ๊ฐ€์ •์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์˜ฌ๋ฐ”๋ฅธ ์›๊ฒฉ ๊ฒฝ๋กœ ๋ญ‰์น˜๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, SFTP ์„œ๋ฒ„์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ด๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ์›๊ฒฉ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ์— ๋ถ™์ด๋Š” ๋Œ€์‹  ์“ธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

Fabric ์ธก์˜ ๋ถ€๋ถ„ ๋””๋ฒ„๊ทธ ๋กœ๊ทธ:

invoke.transfer.put: Massaged relative local path 'setup.py' into '/Users/jforcier/Code/oss/fabric/setup.py'
invoke.transfer.put: Uploading '/Users/jforcier/Code/oss/fabric/setup.py' to '/Users/jforcier/tmp/'
paramiko.transport.sftp.sftp._log: [chan 2] open(b'/Users/jforcier/tmp/', 'wb')

๊ทธ๋Ÿฐ ๋‹ค์Œ traceback์˜ ์ผ๋ถ€๋Š” sftp_client.py ์—์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ CMD_OPEN์— ๋˜์ง€๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

t, msg = self._request(CMD_OPEN, filename, imode, attrblock)

๊ฒฐ๊ตญ SFTP ์„œ๋ฒ„๊ฐ€ IO ์ž‘์—…์— ์ž˜๋ชป๋˜์—ˆ๋‹ค๊ณ  ๋งํ•œ ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋™์ผํ•œ ํŒŒ์ผ/ํด๋ž˜์Šค์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค(์ด๊ฒƒ์ด OpenSSH์˜ ๊ฒฐํ•จ์ธ AFAIK์ด๊ธฐ ๋•Œ๋ฌธ์— "์‹คํŒจ"์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.)


์–ด์จŒ๋“ , ์ด๊ฒƒ์„ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ ๊ทธ๊ฒƒ์ด ๋…ผ๋ฆฌ์ธ์ง€ ์•Œ์•„๋‚ผ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. (๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋Š ์‹œ์ ์—์„œ ์ถ”๊ฐ€๋œ ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค) ๋˜๋Š” ์‹ค์ œ๋กœ ๋ˆ„๋ฝ๋œ ๊ธฐ๋Šฅ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์ข‹์•„, ์•„๋‹ˆ, ๋ชจ๋“  munging์€ ๋น„์–ด ์žˆ๊ฑฐ๋‚˜ ์ƒ๋Œ€์ ์ธ ์›๊ฒฉ ๊ฒฝ๋กœ ์ฃผ๋ณ€์— ์žˆ์œผ๋ฉฐ is-directory ๊ฒ€์‚ฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์žˆ๋Š” ๋™์•ˆ ์›๊ฒฉ ๊ฒฝ๋กœ๊ฐ€ ๋””๋ ‰ํ† ๋ฆฌ์ธ ๊ฒฝ์šฐ FLO๋„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

v1์—์„œ FLO์˜ .name ์†์„ฑ ์€ Python FLO API ์˜

์–ด์จŒ๋“ , ์—ฌ๊ธฐ v2์—์„œ ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์‹ค์ œ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” "์ด๋ด, ์ด๊ฒƒ๋“ค์— ๋Œ€ํ•ด ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์›๊ฒฉ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค"๋ผ๋Š” ๋ช…์‹œ์ ์ธ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋ชจ๋“  FLO์— ๋ฐ˜๋“œ์‹œ name ์†์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‘˜ ๋‹ค์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž, ๋ชจ๋‘ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ bugfix ๋ฆด๋ฆฌ์Šค์—์„œ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค ๐ŸŽ‰

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰