GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ruby on Rails auf Azure App Service (Websites) mit Linux (und Ubuntu auf Windows 10)

Das Ausführen von Ruby on Rails unter Windows war in der Vergangenheit scheiße. Die meisten Ruby/Rails-Leute sind Mac- und Linux-Benutzer und haben sich nicht darauf konzentriert, Rails für die tägliche Entwicklung unter Windows nutzbar zu machen. Es gab einige heroische Bemühungen einiger Freiwilliger, Rails mit Projekten wie RailsInstaller zum Laufen zu bringen, aber native Module und Abhängigkeiten verursachen fast immer Probleme. Mehr noch, wenn Sie Ihre Rails-App bereitstellen, verwenden Sie wahrscheinlich einen Linux-Host, sodass Sie möglicherweise auf Unterschiede zwischen den Betriebssystemen stoßen.

Schneller Vorlauf bis heute und Windows 10 verfügt über das Ubuntu-basierte "Linux Subsystem for Windows" (WSL) und die native Bash-Shell, was bedeutet, dass Sie echte Linux-Elf-Binärdateien nativ ohne eine virtuelle Maschine unter Windows ausführen können ... also sollten Sie Ihre tun Windows-basierte Rails-Entwicklung in Bash unter Windows.

Die Entwicklung von Ruby on Rails ist unter Windows 10 großartig, da Windows 10 den Teil der "Windows"-Benutzeroberfläche und Bash und Ubuntu die Shell verwaltet.

Nachdem ich es eingerichtet habe, möchte ich meine App einfach per Git in Azure bereitstellen.

Entwicklung auf Ruby on Rails unter Windows 10 mit WSL

Rails- und Ruby-Leute können apt-get update und apt-get install ruby, sie können rbenv oder rvm nach Belieben installieren. Heutzutage wird rbenv bevorzugt.

Sobald Sie Ubuntu unter Windows 10 installiert haben, können Sie "rbenv" schnell wie folgt in Bash installieren. Hier bekomme ich 2.3.0.

~$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
~$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
~$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
~$ exec $SHELL
~$ git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
~$ echo 'export PATH="$HOME/.rbenv/plugins/ruby-build/bin:$PATH"' >> ~/.bashrc
~$ exec $SHELL
~$ rbenv install 2.3.0
~$ rbenv global 2.3.0
~$ ruby -v
~$ gem install bundler
~$ rbenv reshash

Hier ist ein Screenshot mitten im Prozess auf meinem SurfaceBook. Dieser Erstellungs-/Installationsschritt dauert eine Weile und belastet die Festplatte sehr, FYI.

An dieser Stelle habe ich Ruby, jetzt brauche ich Rails, sowie NodeJs für die Rails Asset Pipeline. Sie können die Versionen nach Bedarf ändern.

@ curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ gem install rails -v 5.0.1

Sie werden wahrscheinlich auch entweder PostgresSQL oder MySQL oder Mongo wollen, oder Sie können eine Cloud DB wie Azure DocumentDB verwenden.

Wenn Sie gleichzeitig unter Windows und Linux entwickeln, möchten Sie Ihren Code wahrscheinlich an der einen oder anderen Stelle aufbewahren, nicht an beiden. Ich verwende den automatischen Einhängepunkt, den WSL unter /mnt/c erstellt, also bin ich für dieses Beispiel unter /mnt/c/Users/scott/Desktop/RailsonAzure, das einem Ordner auf meinem Windows-Desktop zugeordnet ist. Sie können überall sein, achten Sie einfach auf Ihre CR/LF-Einstellungen und bleiben Sie in einer Welt.

Ich habe ein "Schienen neu" gemacht. und es lokal zum Laufen gebracht. Hier sehen Sie Visual Studio Code mit Ruby-Erweiterungen und mein Projekt neben Bash unter Windows geöffnet.

Nachdem ich eine Rails-App ausgeführt habe und in der Lage bin, sauber zu entwickeln, indem ich zwischen Visual Studio Code unter Windows und der Bash-Eingabeaufforderung in Ubuntu hin und her springe, möchte ich die App im Web bereitstellen.

Da dies eine einfache "Hello World"-Standard-Rail-App ist, kann ich sie nicht irgendwo bereitstellen, wo die Rails-Umgebung in Produktion ist. Es gibt keine Route in routes.rb (die Yay! You're on Rails-Nachricht ist nur zur Entwicklungszeit) und es gibt keinen SECRET_KEY_BASE-Umgebungsvariablensatz, der verwendet wird, um signierte Cookies zu überprüfen. Ich muss diese beiden Dinge hinzufügen. Ich werde die Datei "routes.rb" schnell ändern, um nur die Standard-Willkommensseite für diese Demo zu verwenden, etwa so:

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
    get '/' => "rails/welcome#index"
end

Und ich füge SECRET_KEY_BASE als App-Einstellung/ENV-Variable im Azure-Portal hinzu, wenn ich unten mein Back-End erstelle.

Bereitstellen der Ruby on Rails-App für Azure App Service unter Linux

Wählen Sie im Menü „Neu“ im Azure-Portal Web-App unter Linux aus (in der Vorschau zum Zeitpunkt, als ich dies schrieb) aus der Option Web + Mobile. Dadurch wird ein App Service-Plan erstellt, der eine App enthält. Es gibt eine Reihe von Anwendungsstapeln, die Sie hier verwenden können, darunter node.js, PHP, .NET Core und Ruby.

HINWEIS: Einige Glossar- und Definitionspunkte. Azure App Service ist das Azure PaaS (Platform as a Service). Sie führen Web-Apps auf Azure App Service aus. Ein Azure App Service Plan ist die zugrunde liegende virtuelle Maschine (klein, mittel, groß usw.), die n hostet Anzahl von App Services/Websites. Ich habe 20 App Services/Websites, die unter einem App Service-Plan mit einer kleinen VM ausgeführt werden. Standardmäßig ist dies Windows, auf dem Php, Python, Node, .NET usw. ausgeführt werden können. In diesem Blogbeitrag verwende ich einen App Service-Plan, der Linux ausführt und Docker-Container hostet. Meine Rails-App lebt in diesem App Service und Sie finden die Dockerfiles und andere Informationen hier https://github.com/Azure-App-Service/ruby oder verwenden Sie Ihr eigenes Docker-Image.

Hier sehen Sie meinen Azure App Service, den ich jetzt mit Git bereitstellen werde. Ich könnte auch FTP.

Ich ging in die Bereitstellungsoptionen und richtete eine lokale (für Azure) Git-Repro ein. Jetzt kann ich das unter Übersicht sehen.

Auf meiner lokalen Bash füge ich Azure als Remote hinzu. Dies kann eingerichtet werden, wie auch immer Ihr Workflow eingerichtet ist. In diesem Fall ist Git FTP für Code.

$ git add remote azure https://[email protected]:443/RubyOnAzureAppService.git
$ git add .
$ git commit -m "initial"
$ git push azure master

Dadurch wird die Bereitstellung gestartet, während der Code an Azure übertragen wird.

WICHTIG :Ich werde auch „RAILS_ENV=production“ und ein SECRET_KEY_BASE=zu meinen Azure-Anwendungseinstellungen hinzufügen. Mit „Rake Secret“ können Sie ein neues Geheimnis erstellen.

Wenn ich Probleme habe, kann ich unter „Diagnoseprotokolle“ die Anwendungsprotokollierung, die Webserverprotokollierung und die detaillierten Fehlermeldungen aktivieren, dann per FTP in den App Service einsteigen und die Protokolle anzeigen.

Dies ist alles in der Vorschau, daher werden Sie wahrscheinlich auf Probleme stoßen. Sie aktualisieren die zugrunde liegenden Systeme sehr oft. Einige Fallstricke, auf die ich gestoßen bin:

  • Das Bereitstellen/Neubereitstellen erfordert heute einen expliziten Neustart der Website. Ich habe gehört, das wird bald behoben.
  • Ich musste Protokolldateien per FTP ausgraben. Sie werden Protokolle im Portal verfügbar machen.
  • Ich habe die Kudu "Sidecar"-Site auf mysite.scm verwendet .azurewebsite.net, um Shell-Zugriff auf den Kudu-Container zu erhalten, aber ich würde gerne eines Tages per SSH in den tatsächlich ausgeführten Container vom Azure-Portal aus zugreifen oder darauf zugreifen können.

Wenn Sie jedoch weitere interne Details darüber wünschen, wie dies funktioniert, können Sie sich eine Sitzung von Connect() im letzten Jahr mit dem Entwickler Nazim Lala ansehen. Danke an James Christianson für seine Debugging-Hilfe!

Sponsor: Wussten Sie, dass sich VSTS eng in Octopus Deploy integrieren lässt? Sehen Sie sich Damian Brady und Brian A. Randell an, wie sie Ihnen zeigen, wie Sie Bereitstellungen von VSTS zu Octopus Deploy automatisieren, und demonstrieren Sie das neue VSTS Octopus Deploy-Dashboard Widget. Jetzt ansehen


Linux
  1. Überwachung von Linux- und Windows-Hosts mit Glances

  2. Installieren Sie Linux Mint mit Windows 8 | Dual-Boot-Windows 8 und Linux Mint 12

  3. Fehler mit Vagrant und Ubuntu 12.10 mit Rvm?

  4. Zeigen Sie die DELL-Service-Tag-Nummer und den Express-Servicecode unter Linux und Windows an

  5. Wie man Strg+C unter Windows und Linux mit Qt abfängt

Ruby on Rails unter Windows ist nicht nur möglich, es ist fabelhaft mit WSL2 und VS Code

Webentwicklung und fortgeschrittene Techniken mit Linux unter Windows (WSL)

Ubuntu jetzt im Windows Store:Updates für Linux unter Windows 10 und wichtige Tipps

Remotezugriff auf Windows 10 über Ubuntu Linux und Vise Versa

Die 20 besten Linux-Webhosting für persönliche Websites und Unternehmen

So installieren und konfigurieren Sie den Gogs Git-Dienst unter Ubuntu Linux