У меня есть веб-приложение, которое я хотел бы запустить со сценарием, а не открывать 3 вкладки и запускать процессы, затем изменить строку на файл конфигурации, а затем запустите веб-сервер.
Во-первых, чтобы я мог протестировать веб-перехватчики, мне нужно запустить ngrok http https: // localhost: 3000
, что дает примерно такой же результат -
ngrok by @inconshreveable (Ctrl+C to quit)
Session Status online
Account myemail@gmail.com (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'
Я хотел бы записать это в одну команду. Я могу использовать более крупную переменную среды оболочки для хоста ngrok, хотя для начала мне нужно как-то получить ее из того же скрипта. Надеюсь, я не прошу слишком многого. Мне очень нравятся форумы Ubuntu. Думаю, я слишком аутист для большинства других мест. Да здравствует Ubuntu!
Примерно так:
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
.
Я нашел решение, углубившись в детали более точно. Я немного адаптировал код. curl
с командой jq
- настоящая жемчужина. Спасибо.
(Примечание: localhost: 4040 - это страница веб-интерфейса ngrok
.)
#!/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'
NGROK_SSL_HOST = File.open('.ngrok_ssl_host').read.match(/[0-9a-z]{12}\.ngrok\.io/)[0]
config.hosts << NGROK_SSL_HOST