如何使用多个前驱值来编写应用程序的启动脚本?

如何使用多个前驱值来编写应用程序的启动脚本?

我有一个 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

相关内容