我有一个 Web 应用程序,我想用脚本启动它,而不是打开 3 个选项卡并启动进程,然后将一行更改为配置文件,然后启动 Web 服务器。
首先,为了测试 webhook,我需要运行ngrok http https://localhost:3000
,它会产生如下结果:
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account [email protected] (Plan: Free)
Version 2.3.35
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://2f22e8990cbe.ngrok.io -> https://localhost:3000
Forwarding https://2f22e8990cbe.ngrok.io -> https://localhost:3000
Connections ttl opn rt1 rt5 p50 p90
13973 1 0.00 0.07 0.00 0.00
然后我更改了一个配置文件来适应新的主机(随机免费使用ngrok
)
# development.rb
config.hosts << '2f22e8990cbe.ngrok.io' # (tunnel address from above)
然后我保存文件并启动网络服务器。
$ rails server puma --bind 'ssl://127.0.0.1:3000?key=/home/oaty/.ssh/localhost.key&cert=/home/oaty/.ssh/localhost.crt'
我想将其编写成一个命令。我可以使用更大的 shell 环境变量来处理 ngrok 主机,不过首先我必须以某种方式从同一个脚本中获取它。我希望我的要求不是太多。我真的很喜欢 Ubuntu 论坛。我想我太自闭了,不适合大多数其他地方。Ubuntu 万岁!
答案1
就像是:
newhost=$(ngrok http https://localhost:3000 | \
grep -E '^Forwarding\s+https://' | \
grep -E -o '[0-9a-f]{12}\.ngrok\.io`)
if [[ -n "$newhost" ]] ; then
echo "$newhost" >>config.hosts
rails server ...(the rest)
else
echo "Failure in ngrok" >&2
fi
读man grep bash
。
答案2
通过更精确地深入研究,我找到了解决方案。我对代码进行了一些修改。withcurl
命令jq
才是真正的精华。谢谢。(注意:localhost:4040 是ngrok
的 Web UI 页面。)
启动_ssl.sh
#!/bin/bash
sh -c 'ngrok http https://localhost:3000 &'
sleep 2
curl --silent http://127.0.0.1:4040/api/tunnels | jq '.tunnels[0].public_url' > .ngrok_ssl_host
rails s puma -b 'ssl://127.0.0.1:3000?key=/home/jess/.ssh/localhost.key&cert=/home/jess/.ssh/localhost.crt'
然后在 config/development.rb 文件中...:)
NGROK_SSL_HOST = File.open('.ngrok_ssl_host').read.match(/[0-9a-z]{12}\.ngrok\.io/)[0]
config.hosts << NGROK_SSL_HOST