[RUBY] [Rails] Ich war süchtig nach den Nginx-Einstellungen, als ich Action Cable verwendete.

Einführung

Dies ist eine Geschichte, als ich Action Cable verwendet habe, um einer mit Ruby on Rails erstellten App eine Echtzeit-Chat-Funktion hinzuzufügen.

In der lokalen Umgebung funktionierte es einwandfrei, aber der Echtzeit-Chat-Teil funktionierte in der Produktionsumgebung nicht.

Nach der Untersuchung der Ursache scheint es notwendig zu sein, nginx so einzustellen, dass es der in ActionCable verwendeten Kommunikation namens websocket entspricht.

(Als Referenz) Ursprüngliche Nginx-Einstellungen

Dies ist die ursprüngliche Nginx-Einstellung. Dies ist auch enthalten, damit der Unterschied zwischen vor und nach der Korrektur leicht verstanden werden kann. Dies hat gut funktioniert, bevor ActionCable implementiert wurde.


 # https://github.com/puma/puma/blob/master/docs/nginx.md
upstream app {
  server unix:///app/tmp/sockets/puma.sock;
}

server {
  listen 80;
 Servername ***. ***. ***. ***; # IP-Adresse der App

  keepalive_timeout 5;

  # static files
  root /app/public;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;

    # static files
    if (-f $request_filename) {
      break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://app;
      break;
    }
  }

   location ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$ {
    expires max;
    break;
  }
}

Nginx-Einstellungen für Action Cable

Um mit der Websocket-Kommunikation umgehen zu können Ort / Kabel und darunter hinzugefügt.


 https://github.com/puma/puma/blob/master/docs/nginx.md
upstream app {
  server unix:///app/tmp/sockets/puma.sock;
}

server {
  listen 80;
 Servername ***. ***. ***. ***; # IP-Adresse der App
  keepalive_timeout 5;

  # static files
  root /app/public;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;

    # static files
    if (-f $request_filename) {
      break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1/index.html break;
    }
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://app;
      break;
    }
  }

 # Fügen Sie Folgendes hinzu

  location /cable {
    proxy_http_version 1.1;
    proxy_set_header Upgrade websocket;
    proxy_set_header Connection Upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://app/cable;
  }

 #Zusatzteil bis hierher

   location ~* \.(ico|css|gif|jpe?g|png|js)(\?[0-9]+)?$ {
    expires max;
    break;
  }
}

Recommended Posts

[Rails] Ich war süchtig nach den Nginx-Einstellungen, als ich Action Cable verwendete.
Eine Geschichte, der ich beim Testen der API mit MockMVC verfallen war
Wovon ich süchtig war, als ich rspec auf Schienen benutzte
Die Geschichte, nach der ich beim Einrichten von STS süchtig war
Ich war süchtig nach der Rollmethode
Ich war süchtig nach dem Spring-Batch-Test
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
Ich war süchtig nach RXTX mit Sierra
Memorandum: Wovon ich süchtig war, als ich auf die Accounting Freee API traf
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
[Circle CI] Ich war süchtig nach dem automatischen Test von Circle CI (Rails + MySQL) [Memo]
Ich war süchtig nach NoSuchMethodError in Cloud-Endpunkten
Ich war süchtig nach der Aufzeichnung des zugehörigen Modells
Was ich beim Update auf Spring Boot 1.5.12 behoben habe ・ Wovon ich süchtig war
Ich war süchtig danach, default_url_options mit der Einführung von Rails zu setzen
Ich war süchtig danach, die Update-Anweisung in MyBatis zu wiederholen
Ich war süchtig nach Laradock + VSCode + xdebug
Was ich mit der Redmine REST API süchtig gemacht habe
Ich war seltsamerweise süchtig danach, Javas Stream-API mit Scala zu verwenden
Ich war süchtig danach, sbt zu starten
Ein Hinweis, als ich süchtig danach war, Ubuntu auf WSL1 in WSL2 zu konvertieren
Über die Sache, dass ich süchtig danach war, wie man Hashmap benutzt
Ich war süchtig nach der API-Version min23 von registerTorchCallback
[Rails 5] Anzeigen des Bildschirms zum Ändern des Kennworts bei Verwendung von devise
[Rails] So lösen Sie ActiveSupport :: MessageVerifier :: InvalidSignature, von dem ich bei der Einführung des Twitter-Logins abhängig war [ActiveStorage]
Ich war süchtig danach, in @ SpringApplicationConfiguration-> @SpringBootTest umzuschreiben
Ich habe die Punkte zusammengefasst, die bei der kombinierten Verwendung von Ressourcen und Ressourcen zu beachten sind
Ich war süchtig danach, MySQL 8.0 mit einem 5.7-Gefühl zu berühren. My.cnf-Konfigurationsproblem
Aufgenommen, weil ich süchtig nach der Standardeingabe der Scannerklasse war
Ich war süchtig nach Scrollview, weil ich nicht auf die UIView mit variabler Größe tippen konnte
Ich war süchtig nach Unit-Tests mit dem Pufferoperator in RxJava
[Rails] Wenn ich form_with benutze, friert der Bildschirm ein! ??
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich habe versucht, die Sitzung in Rails zu organisieren
Code zum Verbinden von Rails 3 mit PostgreSQL 10
Ich war süchtig danach, onActivityResult () mit DialogFragment zu machen
Ich war süchtig danach, vom Docker-Container aus keine Verbindung zu AWS-S3 herstellen zu können
Ich war ein wenig süchtig nach dem S3-Prüfsummenvergleich, machen Sie sich also eine Notiz.
Wovon ich süchtig war, als ich eine Spring Boot-Anwendung mit VS Code entwickelte
Beachten Sie, dass ich süchtig nach Stapelverarbeitung mit Spring Boot war
Bei der Erstellung einer persönlichen App habe ich mich gefragt, ob ich sie mit haml erstellen soll
Beim Importieren von CSV mit Rails war es wirklich einfach, den Befehl nkf zu verwenden
Der Teil, dem ich in "Einführung in Ajax in Java-Webanwendungen" von NetBeans verfallen war
Beachten Sie, dass ich von den Einstellungen des Android-Projekts von IntelliJ IDEA abhängig war
[Rails] Lösung, wenn bei Verwendung von Capybara mit Rspec der Fehler "undefined method` visit '" angezeigt wird
Eine Geschichte, nach der ich süchtig war, als ich einen Schlüssel bekam, der automatisch auf MyBatis ausprobiert wurde
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen
[Rails] Ich weiß nicht, wie ich das Modell verwenden soll ...
[Ruby] Missverständnis, dass ich das Modul verwendet habe [Anfänger]
Ich möchte die Hauptmethode mit Reflektion aufrufen
Süchtig nach dem Webpacker, der standardmäßig mit Rails 6 geliefert wird