GNU/Linux >> Linux Esercitazione >  >> Linux

Ruby on Rails sul servizio app di Azure (siti Web) con Linux (e Ubuntu su Windows 10)

L'esecuzione di Ruby on Rails su Windows ha storicamente fatto schifo. La maggior parte delle persone di Ruby/Rails sono utenti Mac e Linux e non si sono concentrati sul rendere Rails utilizzabile per lo sviluppo quotidiano su Windows. Ci sono stati alcuni sforzi eroici da parte di un certo numero di volontari per far funzionare Rails con progetti come RailsInstaller, ma i moduli nativi e le dipendenze causano quasi sempre problemi. Inoltre, quando distribuisci la tua app Rails, probabilmente stai utilizzando un host Linux, quindi potresti imbatterti in differenze tra i sistemi operativi.

Avanti veloce fino ad oggi e Windows 10 ha il "Sottosistema Linux per Windows" (WSL) basato su Ubuntu e la shell bash nativa, il che significa che puoi eseguire veri binari elf Linux su Windows in modo nativo senza una macchina virtuale ... quindi dovresti fare il tuo Sviluppo Rails basato su Windows in Bash su Windows.

Lo sviluppo di Ruby on Rails è ottimo su Windows 10 perché Windows 10 gestisce la parte dell'interfaccia utente "Windows" e bash e Ubuntu gestisce la shell.

Dopo averlo configurato, voglio distribuire facilmente la mia app in Azure.

Sviluppo su Ruby on Rails su Windows 10 utilizzando WSL

Le persone di Rails e Ruby possono apt-get update e apt-get install ruby, possono installare rbenv o rvm a loro piacimento. In questi giorni è preferito rbenv.

Una volta installato Ubuntu su Windows 10, puoi installare rapidamente "rbenv" in questo modo all'interno di Bash. Qui sto ottenendo 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

Ecco uno screenshot a metà processo sul mio SurfaceBook. Questo passaggio di compilazione/installazione richiede un po' di tempo e colpisce molto il disco, per tua informazione.

A questo punto ho Ruby, ora ho bisogno di Rails, così come di NodeJs per Rails Asset Pipeline. Puoi modificare le versioni in base alle tue esigenze.

@ 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

Probabilmente vorrai anche PostgresSQL o MySQL o Mongo oppure puoi usare un Cloud DB come Azure DocumentDB.

Quando stai sviluppando contemporaneamente su Windows e Linux, probabilmente vorrai mantenere il tuo codice in un posto o nell'altro, non in entrambi. Uso il punto di montaggio automatico creato da WSL in /mnt/c, quindi per questo esempio sono in /mnt/c/Users/scott/Desktop/RailsonAzure che esegue il mapping a una cartella sul desktop di Windows. Puoi essere ovunque, basta essere a conoscenza delle tue impostazioni CR/LF e rimanere in un unico mondo.

Ho fatto un "rotaie nuove". e l'ho fatto funzionare localmente. Qui puoi vedere il codice di Visual Studio con le estensioni Ruby e il mio progetto aperto accanto a Bash su Windows.

Dopo che ho un'app Rails in esecuzione e sono in grado di sviluppare in modo pulito, saltando tra Visual Studio Code su Windows e il prompt di Bash in Ubuntu, voglio distribuire l'app sul Web.

Poiché si tratta di una semplice app di rails predefinita "Hello World", non posso distribuirla da qualche parte in cui l'ambiente Rails è di produzione. Non c'è Route in route.rb (il messaggio Yay! You're on Rails è solo in fase di sviluppo) e non c'è una variabile d'ambiente SECRET_KEY_BASE impostata che viene utilizzata per verificare i cookie firmati. Devo aggiungere queste due cose. Cambierò rapidamente route.rb per utilizzare solo la pagina di benvenuto predefinita per questa demo, in questo modo:

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

E aggiungerò SECRET_KEY_BASE come impostazione app/var ENV nel portale di Azure quando creo il mio back-end, di seguito.

Distribuzione dell'app Ruby on Rails nel servizio app di Azure su Linux

Dal menu Nuovo nel portale di Azure, scegli App Web su Linux (in anteprima al momento in cui ho scritto questo) dall'opzione Web + Mobile. Verrà creato un piano di servizio app che contiene un'app. Ci sono un sacco di stack di applicazioni che puoi usare qui, inclusi node.js, PHP, .NET Core e Ruby.

NOTA: Alcuni glossario e punti di definizione. Servizio app di Azure è Azure PaaS (Platform as a Service). Si eseguono app Web nel servizio app di Azure. Un Piano del Servizio app di Azure è la macchina virtuale sottostante (sall, medium, large, ecc.) che ospita n numero di servizi app/siti Web. Ho 20 servizi app/siti Web in esecuzione con un piano di servizio app con una piccola macchina virtuale. Per impostazione predefinita, questo è Windows per poter eseguire Php, Python, Node, .NET, ecc. In questo post del blog sto usando un piano di servizio app che esegue Linux e ospita contenitori Docker. L'app My Rails vivrà all'interno di tale servizio app e puoi trovare i Dockerfile e altre informazioni qui https://github.com/Azure-App-Service/ruby o utilizzare la tua immagine Docker.

Qui puoi vedere il mio servizio app di Azure che ora distribuirò usando Git. Potrei anche FTP.

Sono entrato in Deployment OPtions e ho impostato una riproduzione git locale (in Azure). Ora posso vederlo in Panoramica.

Sulla mia bash locale aggiungo azure come telecomando. Questo può essere impostato in qualsiasi modo sia impostato il flusso di lavoro. In questo caso, Git è FTP per il codice.

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

Ciò avvia la distribuzione quando il codice viene inviato ad Azure.

IMPORTANTE :aggiungerò anche "RAILS_ENV=produzione" e un SECRET_KEY_BASE=alle mie impostazioni dell'applicazione Azure. Puoi creare un nuovo segreto con "rake secret".

In caso di problemi, posso attivare la registrazione dell'applicazione, la registrazione del server Web e i messaggi di errore dettagliati in Registri di diagnostica, quindi eseguire l'FTP nel servizio app e guardare i registri.

Questo è tutto in Anteprima, quindi probabilmente incontrerai problemi. Stanno aggiornando i sistemi sottostanti molto spesso. Alcuni trucchi che ho colpito:

  • La distribuzione/ridistribuzione richiede un riavvio esplicito del sito, oggi. Ho sentito che sarà risolto presto.
  • Ho dovuto estrarre i file di registro tramite FTP. Esporranno i log nel portale.
  • Ho usato il sito Kudu "sidecar" su mysite.scm .azurewebsite.net per ottenere l'accesso della shell al contenitore Kudu, ma un giorno vorrei poter accedere o accedere al contenitore in esecuzione effettivo dal portale di Azure.

Detto questo, se desideri maggiori dettagli interni su come funziona, puoi guardare una sessione di Connect() l'anno scorso con lo sviluppatore Nazim Lala. Grazie a James Christianson per il suo aiuto nel debugging!

Sponsor: Sapevi che VSTS può integrarsi strettamente con Octopus Deploy? Guarda Damian Brady e Brian A. Randell mentre ti mostrano come automatizzare le implementazioni da VSTS a Octopus Deploy e fai una dimostrazione del nuovo dashboard di VSTS Octopus Deploy aggeggio. Guarda ora


Linux
  1. Monitoraggio degli host Linux e Windows con Sguardi

  2. Installa Linux Mint con Windows 8 | Dual Boot Windows 8 e Linux Mint 12

  3. Errori con Vagrant e Ubuntu 12.10 con Rvm?

  4. Visualizza il codice di servizio DELL e il codice di servizio espresso da Linux e Windows

  5. Come catturare Ctrl+C su Windows e Linux con Qt

Ruby on Rails su Windows non è solo possibile, è favoloso usando WSL2 e VS Code

Sviluppo Web e Tecniche Avanzate con Linux su Windows (WSL)

Ubuntu ora in Windows Store:aggiornamenti a Linux su Windows 10 e suggerimenti importanti

Accesso remoto a Windows 10 tramite Ubuntu Linux e Vise Versa

I 20 migliori hosting Web Linux per siti personali e aziende

Come installare e configurare il servizio Gogs Git su Ubuntu Linux