PUMA-DEV เป็นผู้สืบทอดทางอารมณ์ของ POW มันเป็นวิธีที่ง่ายและรวดเร็วในการจัดการแอพในการพัฒนาบน MacOS และ Linux
.test
โดเมนย่อย (กำหนดค่าได้).test
, .puma
pow
ที่น่าเคารพไม่ได้รับการดูแลอีกต่อไป ขั้นแรกให้ตรวจสอบให้แน่ใจว่ามีการติดตั้งอัญมณี puma
มันอาจเป็นของ gemfile ของแอปพลิเคชันที่คุณพยายามให้บริการผ่าน PUMA-DEV
# Gemfile
gem 'puma'
brew install puma/puma/puma-dev
คุณสามารถดาวน์โหลดไบนารีสำหรับ macOS และ linux ได้ที่ https://github.com/puma/puma-dev/releases
#! /usr/bin/env bash
go version
go get github.com/puma/puma-dev/...
cd $GOPATH /src/github.com/puma/puma-dev/
make && make install
$GOBIN /puma-dev -V
# Configure some DNS settings that have to be done as root
sudo puma-dev -setup
# Configure puma-dev to run in the background on ports 80 and 443 with the domain `.test`.
puma-dev -install
หากคุณต้องการให้ puma-dev
ใช้พอร์ตอื่นที่ไม่ใช่ 80 ให้ผ่านผ่าน -install-port
ตัวอย่างเช่นใช้พอร์ต 81: puma-dev -install -install-port 81
หมายเหตุ: หากคุณติดตั้ง PUMA-DEV V0.2 โปรดเรียกใช้ sudo puma-dev -cleanup
เพื่อลบกฎไฟร์วอลล์ที่ PUMA-DEV ไม่ได้ใช้อีกต่อไป (และจะขัดแย้งกับการทำงานของ PUMA-DEV)
หมายเหตุ: หากคุณติดตั้ง POW มาก่อนในระบบโปรดตรวจสอบให้แน่ใจว่าได้เรียกใช้สคริปต์ถอนการติดตั้งของ POW อ่านรายละเอียดเพิ่มเติมในคู่มือ POW
Run: puma-dev -uninstall
หมายเหตุ: หากคุณผ่านตัวเลือกที่กำหนดเอง (เช่น -d test:localhost
) ถึง -setup
ให้แน่ใจว่าได้ส่งผ่านไปยัง -uninstall
เช่นกัน มิฉะนั้น /etc/resolver/*
อาจมีรายการเด็กกำพร้า
เมื่อติดตั้ง PUMA-DEV เป็นเอเจนต์ผู้ใช้ (โหมดเริ่มต้น) มันจะบันทึกเอาต์พุตจากตัวเองและแอพไปยัง ~/Library/Logs/puma-dev.log
คุณสามารถอ้างถึงที่นั่นเพื่อดูว่าแอปเริ่มต้นและค้นหาข้อผิดพลาดหรือไม่
ในอนาคต PUMA-DEV จะให้คอนโซลรวมสำหรับเอาต์พุตบันทึกนี้
PUMA -DEV รองรับ Linux แต่ต้องใช้ขั้นตอนการติดตั้งเพิ่มเติมต่อไปนี้เพื่อให้การติดตามคุณสมบัติทั้งหมดทำงาน ( -install
และ -setup
Flags สำหรับ Linux)
PUMA-DEV ROOT CA ถูกสร้างขึ้น (ใน ~/.puma-dev-ssl/
) แต่คุณจะต้องติดตั้งและไว้วางใจสิ่งนี้เป็นหน่วยงานใบรับรองโดยการเพิ่มลงในร้านประกาศนียบัตรความน่าเชื่อถือของระบบปฏิบัติการของคุณหรือโดยเชื่อถือได้โดยตรง ในเบราว์เซอร์ที่คุณโปรดปราน (เนื่องจากเบราว์เซอร์บางตัวจะไม่แบ่งปันร้านค้า Trust System ของระบบปฏิบัติการ)
ก่อนอื่นให้เริ่ม PUMA-DEV เพื่อสร้างใบรับรอง CA เป็น ~/.puma-dev-ssl/cert.pem
สำหรับ Arch Linux, Fedora และการแจกแจงอื่น ๆ โดยใช้ P11-kit ลองสิ่งนี้:
# convert from PEM to DER
openssl x509 -in ~ /.puma-dev-ssl/cert.pem -outform der -out ~ /.puma-dev-ssl/cert.crt
# store certificate as an anchor in the trust policy store
sudo trust anchor --store ~ /.puma-dev-ssl/cert.crt
# verify
trust list --filter=ca-anchors | grep -i -C2 Puma-dev
สำหรับ Debian, Ubuntu ฯลฯ ลองสิ่งนี้:
sudo mkdir -p /usr/local/share/ca-certificates
sudo cp ~ /.puma-dev-ssl/cert.pem /usr/local/share/ca-certificates/puma-dev-pem.crt
sudo update-ca-certificates
ในระบบที่มี systemd-resolved
ส่วนขยาย .localhost
จะมีให้โดยค่าเริ่มต้น ลอง ping some-domain.localhost
เพื่อดูว่ามันใช้งานได้หรือไม่
เพื่อขอโดเมน .test
(หรือแบบกำหนดเองอื่น ๆ ) เพื่อแก้ไขให้ติดตั้ง dev-tld-resolver ตรวจสอบให้แน่ใจว่าใช้ test
(หรือ TLD แบบกำหนดเองที่คุณต้องการใช้) เมื่อกำหนดค่า TLD
Linux ป้องกันไม่ให้แอปพลิเคชันเชื่อมโยงกับพอร์ตต่ำกว่า 1024 โดยค่าเริ่มต้น คุณไม่จำเป็นต้องผูกกับพอร์ต 80/443 เพื่อใช้ PUMA-DEV แต่มันทำให้การใช้โดเมน .test
ดีกว่ามาก (เช่นคุณจะสามารถใช้โดเมนตามที่เป็นอยู่ในเบราว์เซอร์ของคุณแทนที่จะให้หมายเลขพอร์ต )
มี 2 ตัวเลือกเพื่อให้ Puma-Dev ฟังบนพอร์ต 80 และ 443:
sudo setcap CAP _ NET _ BIND _ SERVICE=+eip /path/to/puma-dev
หรือ 2. ติดตั้ง authbind
และเรียกใช้ puma-dev ด้วยเมื่อคุณต้องการใช้เช่น
authbind puma-dev -http-port 80 -https-port 443
มีทางลัดสำหรับการเชื่อมโยงถึง 80/443 โดยผ่าน -sysbind
ไปยัง Puma -Dev เมื่อเริ่มต้นซึ่งแทนที่ -http-port
และ -https-port
บน Linux, PUMA -DEV จะไม่ทำงานในพื้นหลังโดยอัตโนมัติ (ตามสคริปต์ MacOS -install
); คุณจะต้องวิ่งในเบื้องหน้า คุณสามารถตั้งค่า daemon ระบบเพื่อเริ่มต้น Puma-Dev ในพื้นหลังด้วยตัวเอง
/lib/systemd/system/puma-dev.service
และใส่ในสิ่งต่อไปนี้: [Unit]
After=network.target
[Service]
User=$USER
ExecStart=/path/to/puma-dev -sysbind
Restart=on-failure
[Install]
WantedBy=multi-user.target
แทนที่ path/to/puma-dev
ด้วยเส้นทางที่แน่นอนไปยัง PUMA-DEV แทนที่ตัวแปร $USER
ด้วยชื่อของผู้ใช้ที่คุณต้องการทำงานภายใต้
sudo systemctl daemon-reload
sudo systemctl enable puma-dev
sudo systemctl start puma-dev
ในระบบที่มี Selinux คุณอาจต้องเรียกใช้ restorecon /path/to/puma-dev
เพื่อเรียกใช้
เพียงแค่ symlink ไดเรกทอรีแอปของคุณเป็น ~/.puma-dev
! แค่ไหน!
คุณสามารถใช้คำสั่งย่อยของผู้ช่วยในตัว: puma-dev link [-n name] [dir]
เพื่อเชื่อมโยงไดเรกทอรีแอปลงในไดเรกทอรี PUMA-DEV ของคุณ ( ~/.puma-dev
โดยค่าเริ่มต้น)
Run: puma-dev -h
คุณมีความสามารถในการกำหนดค่าค่าส่วนใหญ่ที่คุณจะใช้ในแต่ละวัน
PUMA-DEV รองรับตัวแปรสภาพแวดล้อมการโหลดก่อนที่ PUMA จะเริ่ม ตรวจสอบไฟล์ต่อไปนี้ในลำดับนี้:
~/.powconfig
.env
.powrc
.powenv
.pumaenv
คุณสามารถป้องกัน PUMA-DEV จากการโหลดไฟล์สภาพแวดล้อมเหล่านี้โดยการตั้งค่าตัวแปรสภาพแวดล้อมที่สอดคล้องกันเป็น '0':
PUMADEV_SOURCE_POWCONFIG=0
PUMADEV_SOURCE_ENV=0
PUMADEV_SOURCE_POWRC=0
PUMADEV_SOURCE_POWENV=0
PUMADEV_SOURCE_PUMAENV=0
นอกจากนี้ PUMA-DEV ใช้ตัวแปรสภาพแวดล้อมอื่น ๆ สองสามตัวเพื่อควบคุมว่า PUMA เริ่มต้นอย่างไรที่คุณสามารถเขียนทับในการกำหนดค่าเชลล์ที่โหลดได้
CONFIG
: ไฟล์กำหนดค่า PUMA ที่จะโหลดโดยปกติแล้วบางอย่างเช่น config/puma-dev.rb
ค่าเริ่มต้นเป็นไม่มีการกำหนดค่าTHREADS
: กี่เธรด PUMA ควรใช้พร้อมกัน ค่าเริ่มต้นถึง 5WORKERS
: จะต้องเริ่มกระบวนการของคนงานกี่กระบวนการ ค่าเริ่มต้นถึง 0 หมายถึงเฉพาะการใช้เธรด.test
.dev
แต่เป็นเจ้าของโดย Google และตั้งแต่เดือนธันวาคม 2017 HSTs กับเว็บไซต์จริงที่โฮสต์ที่นั่น.dev
และ .foo
เนื่องจากเป็น tlds จริง หากคุณต้องการให้ PUMA-DEV รีสตาร์ท แอพเฉพาะ คุณสามารถเรียกใช้ touch tmp/restart.txt
ในไดเรกทอรีของแอปนั้น
หากคุณต้องการให้ puma-dev หยุด แอพทั้งหมด (สำหรับปัญหาทรัพยากรหรือเนื่องจากแอพไม่เริ่มต้นใหม่) คุณสามารถส่งสัญญาณ puma-dev
USR1
วิธีที่ง่ายที่สุดในการทำคือ:
puma-dev -stop
Run: puma-dev
PUMA-DEV จะเริ่มต้นโดยค่าเริ่มต้นโดยใช้ไดเรกทอรี ~/.puma-dev
มองหา symlinks ไปยังแอพเหมือนกับ POW วาง Symlink ไปยังแอพของคุณในที่นั่น: cd ~/.puma-dev; ln -s /path/to/my/app test
ตอนนี้คุณสามารถเข้าถึงแอปของคุณเป็น test.test
การรัน puma-dev
ด้วยวิธีนี้จะทำให้คุณต้องใช้พอร์ต HTTP ที่แสดงรายการซึ่งเป็น 9280
โดยค่าเริ่มต้น
PUMA-DEV v0.3 และใช้ Launchd ในภายหลังเพื่อเข้าถึงพอร์ตที่ได้รับการยกเว้นดังนั้นหากคุณติดตั้ง v0.2 คุณจะต้องลบกฎไฟร์วอลล์
Run: sudo puma-dev -cleanup
โดยค่าเริ่มต้น PUMA-DEV ใช้โดเมน .test
เพื่อจัดการแอพของคุณ หากคุณต้องการให้ puma-dev ค้นหาแอพใน ~/.pow
เพียงแค่เรียกใช้ puma-dev -pow
หากคุณมีชุดแอปพลิเคชั่นที่ซับซ้อนมากขึ้นที่คุณต้องการให้ Puma-Dev จัดการคุณสามารถใช้ไดเรกทอรีย่อยภายใต้ ~/.puma-dev
ได้เช่นกัน สิ่งนี้ใช้งานได้โดยการตั้งชื่อแอพด้วยยัติภังค์ ( -
) ที่คุณมี Slash ( /
) ในชื่อโฮสต์ เช่นหากคุณเข้าถึง cool-frontend.test
Puma-dev จะมองหา ~/.puma-dev/cool-frontend
และถ้ามันไม่พบอะไรลอง ~/.puma-dev/cool/frontend
PUMA-DEV ยังสามารถร้องขอพร็อกซีจากโดเมน dev ที่ดีไปยังแอพอื่น ในการทำเช่นนั้นเพียงแค่เขียนไฟล์ (แทนที่จะเป็นไดเรกทอรี symlink'd) ลงใน ~/.puma-dev
พร้อมข้อมูลการเชื่อมต่อ
ตัวอย่างเช่นการมีพอร์ต 9292 แสดงให้เห็นว่า awesome.test
: echo 9292 > ~/.puma-dev/awesome
หรือไปยังพร็อกซีไปยังโฮสต์อื่น: echo 10.3.1.2:9292 > ~/.puma-dev/awesome-elsewhere
PUMA-DEV จะทำให้แอปพร้อมใช้งานผ่าน SSL โดยอัตโนมัติเช่นกัน เมื่อคุณเรียกใช้ puma-dev ครั้งแรกมันจะทำให้กล่องโต้ตอบปรากฏขึ้นในรหัสผ่านของคุณ สิ่งที่เกิดขึ้นคือ PUMA-DEV สร้างการรับรอง CA ของตัวเองที่เก็บไว้ใน ~/Library/Application Support/io.puma.dev/cert.pem
ใบรับรอง CA นั้นใช้เพื่อสร้างใบรับรองสำหรับแอพของคุณแบบไดนามิกเมื่อมีการร้องขอการเข้าถึงพวกเขา มันเกิดขึ้นโดยอัตโนมัติไม่จำเป็นต้องกำหนดค่า ใบรับรองจะถูกเก็บไว้ในหน่วยความจำทั้งหมดดังนั้นในอนาคตจะรีสตาร์ท Puma-Dev ในอนาคตเพียงสร้างใหม่
เมื่อใช้ -install
(และขอบอกตามตรงนั่นคือวิธีที่คุณต้องการใช้ puma-dev) จากนั้น https://blah.test
ฟังพอร์ต 443 โดยค่าเริ่มต้น (กำหนดค่าได้กับ -install-https-port
) https://blah.test
เพื่อเข้าถึงแอปของคุณผ่าน HTTPS
หากแอปของคุณใช้ HTTPS แล้ว WebPack Dev Server (WDS) ควรทำงานผ่าน SSL ด้วยเพื่อหลีกเลี่ยงข้อผิดพลาดของเบราว์เซอร์ "เนื้อหาผสม" ในขณะที่ WDS สามารถสร้างใบรับรองของตัวเองหมดอายุอย่างสม่ำเสมอและมักจะต้องไว้วางใจในแท็บใหม่เพื่อหลีกเลี่ยงข้อผิดพลาดของคอนโซลซ้ำเกี่ยวกับ /sockjs-node/info?t=123
ที่ทำลายการโหลดสินทรัพย์อัตโนมัติผ่าน WDS
ในการแก้ไขการปล่อย WDS นี้ทำงานในโหมด HTTP ธรรมดาและรวมคุณสมบัติพร็อกซีและ HTTPS ของ PUMA-DEV
นี่คือวิธีกำหนดค่า Rails และ Webpacker Gem สำหรับแอพตัวอย่างที่ทำงานที่ https://blah.test
:
echo 3035 > ~/.puma-dev/webpack.blah
เพื่อตั้งค่าพร็อกซีเป็น WDSconfig/environments/development.rb
เพื่อรวมหนึ่งในสิ่งต่อไปนี้: # for webpacker-only projects
config.action_controller.asset_host = '//webpack.blah.test'
# for hybrid webpacker/sprockets projects
config.action_controller.asset_host = proc { |source| '//webpack.blah.test' if source.starts_with?('/packs') }
config/webpacker.yml
เพื่อจับคู่: dev_server:
https: false
host: localhost
port: 3035
public: webpack.blah.test
ตอนนี้คุณสามารถรีสตาร์ทแอพด้วย puma-dev -stop
และเริ่ม WDS ด้วย bin/webpack-dev-server
PUMA-DEV รองรับ WebSockets โดยธรรมชาติ แต่คุณอาจต้องบอกเฟรมเวิร์กเว็บของคุณเพื่ออนุญาตการเชื่อมต่อ
ในกรณีของ Rails คุณต้องกำหนดค่า Rails เพื่ออนุญาตให้มีการร้องขอ WebSockets หรือ WebSocket ทั้งหมดจากบางโดเมน วิธีที่เร็วที่สุดคือการเพิ่ม config.action_cable.disable_request_forgery_protection = true
to config/environments/development.rb
สิ่งนี้จะช่วยให้การเชื่อมต่อ WebSocket ทั้งหมดในระหว่างการพัฒนา
อย่าใช้ disable_request_forgery_protection ในการผลิต!
หรือคุณสามารถเพิ่มบางอย่างเช่น config.action_cable.allowed_request_origins = /(.test$)|^localhost$/
เพื่อให้ทุกสิ่งภายใต้. .test
และ localhost
PUMA-DEV รองรับโดเมน xip.io
และ nip.io
มันจะตรวจจับพวกเขาและตัดพวกเขาออกไปเพื่อให้สามารถเข้าถึงแอพ test
ของคุณเป็น test.ABCDxip.io
PUMA-DEV ช่วยให้คุณสามารถเรียกใช้หลายโดเมนในท้องถิ่น มีประโยชน์ถ้าคุณทำงานกับลูกค้ามากกว่าหนึ่งราย เพียงตั้งค่า puma-dev เช่น So: puma-dev -install -d first-domain:second-domain
PUMA-DEV รองรับโดเมนไม่ใช่แค่ TLDS puma-dev -install -d test:puma.dev
จะอนุญาตให้ myapp.test
และ myapp.puma.dev
แก้ไขได้อย่างถูกต้อง แต่แน่นอนว่านี่จะทำให้หน้าเว็บโครงการที่ https://puma.dev ไม่สามารถเข้าถึงได้
เช่นเดียวกับ POW, PUMA-DEV รองรับไฟล์คงที่ หากแอพมีไดเรกทอรี public
URL ใด ๆ ที่ตรงกับไฟล์ภายในไดเรกทอรีนั้นจะให้บริการ ไฟล์คงที่มีลำดับความสำคัญเหนือแอพ
เมื่อติดตั้งโฮสต์เสมือนจริงแล้วจะสามารถเข้าถึงได้โดยอัตโนมัติจากโดเมนย่อยทั้งหมดของโฮสต์ที่มีชื่อ ตัวอย่างเช่นโฮสต์เสมือนจริง myapp
สามารถเข้าถึงได้ที่ http://www.myapp.test/
และ http://assets.www.myapp.test/
คุณสามารถแทนที่พฤติกรรมนี้เพื่อพูดชี้ www.myapp.test
ไปยังแอปพลิเคชันอื่น: เพียงสร้าง Symlink โฮสต์เสมือนจริงอีกชื่อหนึ่งชื่อ www.myapp
สำหรับแอปพลิเคชันที่คุณต้องการ
PUMA-DEV เริ่มพัฒนา API สถานะที่สามารถใช้ในการตรวจสอบและแอพ หากต้องการเข้าถึงให้ส่งคำขอพร้อม Host: puma-dev
และเส้นทาง /status
ตัวอย่างเช่น: curl -H "Host: puma-dev" localhost/status
สถานะรวมถึง:
PUMA-DEV ปล่อยเหตุการณ์ภายในจำนวนมากและเปิดเผยผ่านกิจกรรม API เหตุการณ์เหล่านี้มีประโยชน์เมื่อแก้ไขข้อผิดพลาดการกำหนดค่า หากต้องการเข้าถึงให้ส่งคำขอพร้อม Host: puma-dev
และเส้นทาง /events
เช่น: curl -H "Host: puma-dev" localhost/events
ในการสร้าง puma-dev ทำตามขั้นตอนเหล่านี้:
go mod download
make build
./puma-dev -V
เพื่อใช้ไบนารีใหม่ของคุณ Tagged builds (เช่น v0.18.0
) จะสร้างการเปิดตัวล่วงหน้าด้วยสิ่งประดิษฐ์เพื่อใช้ในสูตร Homebrew โดยอัตโนมัติ
การสร้างทั้งหมดด้วยการทดสอบผ่านจะเผยแพร่ไบนารีที่บันทึกไว้เป็นเวลา 90 วัน