PUMA-DEV是POW的情感繼任者。它提供了一種管理MacOS和Linux開發應用程序的快速簡便方法。
.test
子域(可配置)輕鬆訪問應用程序.test
, .puma
。pow
不再保持首先,確保安裝了puma
GEM。它可能屬於您試圖通過puma-dev使用的應用程序的gemfile。
# Gemfile
gem 'puma'
brew install puma/puma/puma-dev
您可以在https://github.com/puma/puma-dev/releases下載MacOS和Linux的二進製文件
#! /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手冊中閱讀更多細節。
運行: puma-dev -uninstall
注意:如果將自定義選項(例如-d test:localhost
)傳遞給-setup
,請確保將它們傳遞給-uninstall
。否則, /etc/resolver/*
可能包含孤兒條目。
當將PUMA-DEV安裝為用戶代理(默認模式)時,它將從自身和~/Library/Logs/puma-dev.log
記錄輸出。您可以參考在那裡找出應用程序是否已經啟動並查找錯誤。
將來,PUMA-DEV將為此日誌輸出提供一個集成的控制台。
PUMA -DEV支持Linux,但需要遵循以下其他安裝步驟,以使所有功能都起作用(未提供Linux的-install
和-setup
標誌):
生成PUMA-DEV根CA(在~/.puma-dev-ssl/
)中,但是您需要通過將其添加到操作系統的證書信任商店或直接信任它來安裝和信任證書授權在您喜歡的瀏覽器中(某些瀏覽器不會共享操作系統的信任商店)。
首先,啟動puma-dev以生成~/.puma-dev-ssl/cert.pem
的CA證書。
對於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,確保在配置TLDS時使用test
(或您要使用的自定義TLD)。
Linux防止應用程序綁定到端口,默認情況下該1024。您無需綁定到端口80/443即可使用puma-dev,但它使使用.test
域更加好(例如,您可以在瀏覽器中使用域AS-IS,而不是提供端口號)
有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
啟動時,通過將-sysbind
傳遞到puma -dev,可以通過將-http-port
和-https-port
綁定到80/443的快捷方式。
在Linux上,PUMA -DEV不會在後台自動運行(按MACOS -install
腳本);您需要在前景中運行它。您可以設置系統守護程序,以自己在後台啟動puma-dev。
/lib/systemd/system/puma-dev.service
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
,替換為$用戶變量的$USER
變量,用您要在下面運行的用戶的名稱替換。
sudo systemctl daemon-reload
sudo systemctl enable puma-dev
sudo systemctl start puma-dev
在具有SELINUX的系統上,您可能必須運行restorecon /path/to/puma-dev
才能運行它。
只需將應用程序的目錄符合到~/.puma-dev
!就是這樣!
您可以使用內置的助手子命令: puma-dev link [-n name] [dir]
將應用程序目錄鏈接到您的puma-dev目錄(默認為~/.puma-dev
)。
運行: puma-dev -h
您有能力配置您將使用日常使用的大多數值。
PUMA-DEV支持PUMA啟動之前的加載環境變量。它按以下順序檢查以下文件:
~/.powconfig
.env
.powrc
.powenv
.pumaenv
您可以通過將相應的環境變量設置為“ 0”:
PUMADEV_SOURCE_POWCONFIG=0
PUMADEV_SOURCE_ENV=0
PUMADEV_SOURCE_POWRC=0
PUMADEV_SOURCE_POWENV=0
PUMADEV_SOURCE_PUMAENV=0
此外,PUMA-DEV使用其他一些環境變量來控制PUMA的啟動方式,您可以在加載的Shell配置中覆蓋。
CONFIG
:PUMA配置文件加載,通常是config/puma-dev.rb
。默認為沒有配置。THREADS
:PUMA應同時使用多少個線程。默認為5。WORKERS
:啟動了多少個工作流程。默認為0,這意味著僅使用線程。.test
。.dev
,但它歸Google擁有,自2017年12月以來, HST僅在那里托管的真實網站。.dev
和.foo
,因為它們是真正的tld。如果您想讓PUMA-DEV重新啟動特定的應用程序,則可以在該應用程序目錄中運行touch tmp/restart.txt
。
如果您想讓PUMA-DEV停止所有應用程序(對於資源問題或應用程序無法正確重新啟動),則可以將puma-dev
發送給信號USR1
。最簡單的方法是:
puma-dev -stop
運行: puma-dev
PUMA-DEV默認情況下將使用目錄~/.puma-dev
啟動,尋找與POW這樣的應用程序的符號鏈接。將Symlink放在您的應用程序中以: cd ~/.puma-dev; ln -s /path/to/my/app test
。現在,您可以訪問應用程序作為test.test
。
以這種方式運行puma-dev
將需要您使用列出的HTTP端口,默認情況下為9280
。
PUMA-DEV V0.3及以後使用啟動D來訪問特權端口,因此,如果您安裝了V0.2,則需要刪除防火牆規則。
運行: sudo puma-dev -cleanup
默認情況下,PUMA-DEV使用域.test
來管理您的應用程序。如果您想讓puma-dev在~/.pow
中查找應用程序,則只需運行puma-dev -pow
即可。
如果您需要一套更複雜的應用程序,則需要PUMA-DEV進行管理,則可以使用~/.puma-dev
下的子目錄。這是通過用連字符( -
)命名應用程序的,在主機名中您會有斜線( /
)。因此,例如,如果您訪問cool-frontend.test
,puma-dev將尋找~/.puma-dev/cool-frontend
,如果什麼也找不到,請嘗試~/.puma-dev/cool/frontend
。
PUMA-DEV還可以從一個不錯的開發域到另一個應用程序的代理請求。為此,只需將一個文件(而不是符號鏈接目錄)寫入連接信息的~/.puma-dev
。
例如,讓端口echo 9292 > ~/.puma-dev/awesome
顯示為awesome.test
。
或代理另一個主機: 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的方式),然後默認情況下它在端口443上聽(可配置使用-install-https-port
),以便您只需https://blah.test
通過HTTPS訪問您的應用程序。
如果您的應用使用HTTPS,則也應通過SSL運行WebPack Dev Server(WDS),以避免瀏覽器“混合內容”錯誤。儘管WD可以生成自己的證書,但這些證書會定期過期,並且通常需要在新標籤中重新懷托,以避免重複有關/sockjs-node/info?t=123
為了修復此離開http模式下運行的WD,並將PUMA-DEV的代理和HTTPS功能結合在一起。
這是配置導軌和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
重新啟動該應用程序,並使用bin/webpack-dev-server
啟動WDS。
PUMA-DEV本地支持Websockets,但您可能需要告訴您的網絡框架以允許連接。
對於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: puma-dev -install -d first-domain:second-domain
。
PUMA-DEV支持域,而不僅僅是TLD。 puma-dev -install -d test:puma.dev
將允許myapp.test
和myapp.puma.dev
正確解決。但是,當然,這將在https://puma.dev無法訪問的情況下渲染項目網頁。
像POW一樣,PUMA-DEV支持服務靜態文件。如果應用程序具有public
目錄,則提供匹配該目錄中文件的任何URL。靜態文件優先於應用程序。
安裝虛擬主機後,它也可以自動從命名主機的所有子域中訪問。例如,也可以在http://www.myapp.test/
和http://assets.www.myapp.test/
上訪問myapp
虛擬主機。您可以將此行為覆蓋,例如, www.myapp.test
到另一個應用程序:只需為您想要的應用程序創建另一個名為www.myapp
的虛擬主機symlink即可。
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
使用新的二進制標記的構建(例如v0.18.0
)將自動創建帶有工件的預釋放,以便在自製公式中使用。
通過通過測試的所有構建都將發布保存90天的二進製文件。