ฉันจะทำให้ Ruby net :: http หยุดการหยุดทำงานบน ipv6 ได้อย่างไร


0

มีเครื่องมือบางอย่างที่สำคัญต่อขั้นตอนการทำงานของฉันซึ่งพูดคุยกับ www.pivotaltracker.com โดยใช้ทับทิม

การรวมกันของการอัปเดตจาก Ruby 2.1.2 เป็น Ruby 2.1.3, การอัปเดตระบบ os x ล่าสุดและการปรับปรุง Brew ทำให้พวกเขาเริ่มใช้เวลานานในการทำงานและเหตุผลคือipv6ซึ่งฉันสามารถเห็นได้โดยใช้curlเพื่อสร้าง คำขอ API ที่คล้ายกัน:

    curl -v -H "X-TrackerToken: $TOKEN" -X GET http://www.pivotaltracker.com/services/v3/projects
    * About to connect() to www.pivotaltracker.com port 80 (#0)
    *   Trying 2607:f700:1:1388:c856:ed01:e1bf:b0e0…

หลังจากหมดเวลาหนึ่งหรือสองนาทีในที่อยู่ ipv6 ของ www.pivotaltracker.com ทั้งหมดแล้วที่อยู่ ipv4 จะถูกลองใช้ในที่สุดและการร้องขอจะเสร็จสิ้นอย่างสำเร็จ

นี่คือแม้จะมีการใช้sudo networksetup -setv6off Ethernetและการตรวจสอบว่า ipv6 เป็น "ปิด" ในการตั้งค่า> ระบบเครือข่าย ฉันยังพยายามวางรายการที่ถูกต้องใน IPv4 /etc/hostsของฉัน

ถ้าฉันใช้curl --ipv4คำขอเสร็จสมบูรณ์ทันที อย่างไรก็ตามฉันไม่สามารถหาวิธีบังคับให้สคริปต์ทับทิมที่ใช้net::httpในการข้ามได้ipv6

สิ่งที่น่าผิดหวังอย่างยิ่งเกี่ยวกับเรื่องนี้คือปัญหาเดียวกันที่เกิดขึ้นกับการอัพเกรดรอบการพัฒนาสภาพแวดล้อมในเดือนพฤษภาคมหรือมิถุนายนและฉันก็แก้ไขมันได้ แต่ฉันดูเหมือนจะไม่สามารถค้นพบวิธีหรือค้นพบมันอีกครั้ง ไฟล์

ปัญหาไม่ได้เป็นเอกลักษณ์ของ pivotaltracker.com แต่เป็นจริงสำหรับโดเมนใด ๆ ที่มีที่อยู่ ipv6 Os X ลองใช้ที่อยู่ ipv6 ก่อนเว้นแต่จะได้รับคำสั่งให้ทำอย่างอื่นเบราว์เซอร์และแอพอื่น ๆ ที่ดูเหมือนจะทำได้ แต่แอพ ruby ​​และ unix ส่วนใหญ่ไม่ได้ทำ wgetแผงลอยเช่นกัน

ในที่สุดฉันจะอัปเกรดเราเตอร์ของฉันและทำให้ ipv6 ทำงานได้อย่างสมบูรณ์ แต่ในระหว่างนี้ฉันต้องการหาวิธีแก้ปัญหา

เอาต์พุตของ ifconfig

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    inet 127.0.0.1 netmask 0xff000000
    inet6 ::1 prefixlen 128
    inet6 fd3e:fe65:5a2c:ebe1:224:1dff:fe16:65d3 prefixlen 128
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 00:24:1d:16:65:d3
    inet 192.168.0.47 netmask 0xffffff00 broadcast 192.168.0.255
    media: autoselect (1000baseT <full-duplex>)
    status: active
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 2030
    lladdr 00:19:a1:fa:00:00:24:1d
    media: autoselect <full-duplex>
    status: inactive
vnic0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether 00:1c:42:00:00:08
    inet 10.211.55.2 netmask 0xffffff00 broadcast 10.211.55.255
    inet6 fe80::21c:42ff:fe00:8%vnic0 prefixlen 64 scopeid 0x6
    inet6 ::1 prefixlen 64
    media: autoselect
    status: active
vnic1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether 00:1c:42:00:00:09
    inet 10.37.129.2 netmask 0xffffff00 broadcast 10.37.129.255
    inet6 fe80::21c:42ff:fe00:9%vnic1 prefixlen 64 scopeid 0x7
    inet6 ::1 prefixlen 64
    media: autoselect
    status: active

netstat -r

เมื่อฉันรัน netstat -r มันมีส่วน Internet6 แม้จะมีการตั้งค่าระบบ> เครือข่าย> อีเธอร์เน็ต> ขั้นสูง…> กำหนดค่า IPv6 ที่ตั้งเป็นปิด


สิ่งที่คุณอธิบายมักจะเกิดขึ้นเฉพาะเมื่อคุณมีที่อยู่ IPv6 ที่กำหนดค่าไว้ในเครื่องของคุณ แต่การเชื่อมต่อ IPv6 ของคุณไม่ทำงาน เบราว์เซอร์ใช้อัลกอริทึมที่เรียกว่าดวงตามีความสุขเพื่อถอยกลับไปเป็น IPv4 คุณบอกว่าคุณปิด IPv6 คุณสามารถแสดงผลลัพธ์ของifconfigและnetstat -rเพื่อตรวจสอบได้หรือไม่?
Sander Steffann

@ SanderSteffann ฉันสงสัยว่านี่เป็นข้อผิดพลาดของขด ฉันสูญเสียการนับจำนวนครั้งที่ฉันเห็น curl ลองเชื่อมต่อไปยังที่อยู่ IPv6 จากโฮสต์ที่ได้รับการกำหนดค่าด้วย IPv4 เท่านั้น
Michael Hampton

@MichaelHampton แม้ว่าฉันจะสามารถทำซ้ำได้ด้วย curl มันเป็นปัญหาของระบบ มันมีผลกับสคริปต์ทับทิม wget ฯลฯ
Michael Johnston

@SanderSteffann ฉันเพิ่มข้อมูลเกี่ยวกับ ifconfig และ netstat ทำไม OS X ยังคงใช้ IPv6 หลังจากทำงานsudo networksetup -setv6off Ethernet? โดยที่อยู่ที่สำคัญในปัจจุบันสำหรับฉัน (www.pivotaltracker.com) ไม่ได้เป็นเพียงปลายทางที่ได้รับผลกระทบ - ปลายทางใดก็ได้รับผลกระทบ
Michael Johnston

@MichaelJohnston: IPv6 เป็นส่วนหนึ่งของระบบปฏิบัติการส่วนใหญ่ในปัจจุบันดังนั้นการปิดเครื่องมักจะทำให้คุณอยู่ในสถานะที่ไม่ได้รับการสนับสนุน ...
Sander Steffann

คำตอบ:


1

ฉันไม่แน่ใจว่านี่เป็นปัญหาของ Apple แต่เป็นปัญหาของทับทิม คุณสามารถดูรายงานข้อผิดพลาดได้ที่นี่

คุณอาจลองระบุชื่อโฮสต์เฉพาะ ipv6 เมื่อเริ่มต้น

ยกตัวอย่างเช่นTCPServer.new('::1', pivotal_tracker_address)จะช่วยให้คุณใช้โดยไม่ได้ระบุcurl -ipv6ฉันไม่เห็นรหัส Ruby ของคุณดังนั้นฉันไม่แน่ใจว่าจะแก้ไขปัญหาของคุณได้ไหม

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.