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天的二进制文件。