Как динамически добавить мой туннель Ngrok в config.hosts в Rails 6? - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь внести в белый список имя хоста туннеля ngrok в config.hosts, но оно меняется каждый раз, когда я запускаю Ngrok. Есть ли способ получить опубликованный c URL моего туннеля Ngrok, чтобы мне не приходилось использовать hosts.clear?

1 Ответ

3 голосов
/ 18 февраля 2020

Ngrok имеет встроенный JSON API, который можно найти на localhost:4040/api/tunnels.

# lib/ngrok_client.rb
module NgrokClient
  def self.tunnels
    response = Net::HTTP.get(URI('http://localhost:4040/api/tunnels'))
    begin
      JSON.parse(response).dig("tunnels")
    rescue JSON::ParserError => e
      Rails.logger.error %q{
        Failed to parse reponse from Ngroks internal API. Are you sure its running?
      }
    end
  end
  def self.public_urls
    tunnels.select do |h|
      # TODO - don't hardcode the host name
      h.dig("config", "addr") == "http://localhost:3000"
    end.map { |h| URI(h["public_url"]).hostname }.uniq
  end
end
# config/environments/development.rb
Rails.application.configure do
  # ...
  require 'ngrok_client'
  config.hosts += NgrokClient.public_urls
end

Существует также камень ngrok-tunnel , который можно использовать для запуска ngrok со слоя промежуточного программного обеспечения как менее хакерской души.

...