GNU/Linux >> Znalost Linux >  >> Linux

Ruby on Rails na Azure App Service (webové stránky) s Linuxem (a Ubuntu na Windows 10)

Spouštění Ruby on Rails na Windows bylo historicky na hovno. Většina uživatelů Ruby/Rails jsou uživatelé Mac a Linux a nezaměřili se na to, aby byly Rails použitelné pro každodenní vývoj na Windows. Řada dobrovolníků vynaložila hrdinské úsilí, aby Rails spolupracovala s projekty jako RailsInstaller, ale nativní moduly a závislosti téměř vždy způsobují problémy. A co víc, když nasadíte aplikaci Rails, pravděpodobně používáte hostitele Linux, takže můžete narazit na rozdíly mezi operačními systémy.

Rychle vpřed k dnešku a Windows 10 má na Ubuntu založený "Linux Subsystem for Windows" (WSL) a nativní bash shell, což znamená, že můžete spouštět skutečné binární soubory Linux elf na Windows nativně bez virtuálního počítače... Vývoj Rails založený na Windows v Bash na Windows.

Vývoj Ruby on Rails je na Windows 10 skvělý, protože Windows 10 obsluhuje část uživatelského rozhraní „windows“ a bash a Ubuntu obsluhuje shell.

Až to nastavím, chci svou aplikaci snadno nasadit do Azure.

Vývoj na Ruby on Rails ve Windows 10 pomocí WSL

Lidé z Rails a Ruby mohou apt-get update a apt-get install ruby, mohou instalovat rbenv nebo rvm, jak chtějí. V současné době je preferován rbenv.

Jakmile máte nainstalovaný Ubuntu na Windows 10, můžete rychle nainstalovat „rbenv“ takto v rámci Bash. Tady dostávám 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

Zde je snímek obrazovky uprostřed procesu na mém SurfaceBooku. Tento krok sestavení/instalace chvíli trvá a hodně zasáhne disk, FYI.

V tuto chvíli mám Ruby, nyní potřebuji Rails a také NodeJs pro Rails Asset Pipeline. Verze můžete podle potřeby změnit.

@ 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

Pravděpodobně budete také chtít buď PostgresSQL nebo MySQL nebo Mongo, nebo můžete použít Cloud DB, jako je Azure DocumentDB.

Když vyvíjíte současně na Windows i Linuxu, pravděpodobně budete chtít uchovat svůj kód na jednom nebo druhém místě, ne na obou. Používám automatický bod připojení, který WSL vytváří v /mnt/c, takže pro tento příklad jsem v /mnt/c/Users/scott/Desktop/RailsonAzure, který se mapuje do složky na mé ploše Windows. Můžete být kdekoli, stačí si být vědom svých nastavení CR/LF a zůstat v jednom světě.

Udělal jsem "kolejnice nové." a spustil to lokálně. Zde můžete vidět kód Visual Studio s rozšířeními Ruby a můj projekt otevřený vedle Bash ve Windows.

Poté, co budu mít spuštěnou aplikaci Rails a budu se moci čistě vyvíjet, přeskakovat mezi kódem Visual Studio ve Windows a výzvou Bash v Ubuntu, chci aplikaci nasadit na web.

Protože se jedná o jednoduchou výchozí aplikaci pro kolejnice "Hello World", nemohu ji nasadit někde, kde je prostředí Rails Production. V routes.rb není žádná Route (zpráva Yay! You're on Rails je pouze v době vývoje) a neexistuje žádná sada proměnných prostředí SECRET_KEY_BASE, která se používá k ověření podepsaných cookies. Budu muset přidat ty dvě věci. Rychle změním routes.rb tak, aby používal výchozí uvítací stránku pro toto demo, jako je tato:

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

A když vytvořím backend, přidám SECRET_KEY_BASE jako parametr App Setting/ENV var v Azure Portal.

Nasazení aplikace Ruby on Rails do Azure App Service v systému Linux

V nabídce Nový na webu Azure Portal vyberte možnost Webová aplikace v systému Linux (v náhledu v době, kdy jsem to psal) z možnosti Web + mobil. Tím vytvoříte plán služeb aplikací, který obsahuje aplikaci. Zde můžete použít spoustu zásobníků aplikací, včetně node.js, PHP, .NET Core a Ruby.

POZNÁMKA: Několik slovníčků a definic. Azure App Service je Azure PaaS (platforma jako služba). Webové aplikace spouštíte ve službě Azure App Service. Plán Azure App Service je základní virtuální stroj (sall, střední, velký atd.), který je hostitelem n počet služeb aplikací/webových stránek. Mám 20 služeb/webů aplikací spuštěných v rámci plánu služeb aplikací s malým virtuálním počítačem. Ve výchozím nastavení je to Windows, který může spouštět PHP, Python, Node, .NET atd. V tomto příspěvku na blogu používám plán služeb aplikací, který běží na Linuxu a hostí kontejnery Docker. Aplikace My Rails bude fungovat uvnitř této App Service a soubory Dockerfiles a další informace najdete zde https://github.com/Azure-App-Service/ruby nebo použijte svůj vlastní obrázek Docker.

Zde můžete vidět moji Azure App Service, kterou teď nasadím pomocí Git. Mohl bych také FTP.

Šel jsem do možností nasazení a nastavil místní (do Azure) git repro. Teď to vidím v Přehledu.

Na místní bash přidávám azurovou barvu jako dálkový ovladač. To lze nastavit bez ohledu na to, jak je nastaven váš pracovní postup. V tomto případě je Git pro kód FTP.

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

Tím se spustí nasazení, když je kód odeslán do Azure.

DŮLEŽITÉ :Také přidám „RAILS_ENV=production“ a SECRET_KEY_BASE=do nastavení mé aplikace Azure. Pomocí "rake secret."

můžete vytvořit nové tajemství

Pokud mám potíže, mohu zapnout protokolování aplikací, protokolování webového serveru a podrobné chybové zprávy v části Diagnostické protokoly, poté FTP do služby App Service a podívat se na protokoly.

To vše je v náhledu, takže pravděpodobně narazíte na problémy. Velmi často aktualizují základní systémy. Nějaké chyby, které jsem trefil:

  • Zavedení/přemístění vyžaduje explicitní restart webu ještě dnes. Slyšel jsem, že to bude brzy opraveno.
  • Musel jsem vykopat soubory protokolu přes FTP. Chystají se vystavit protokoly na portálu.
  • Použil jsem web Kudu "sidecar" na mysite.scm .azurewebsite.net, abych získal přístup k shellu ke kontejneru Kudu, ale chtěl bych mít jednoho dne možnost připojit se k aktuálnímu běžícímu kontejneru nebo k němu získat přístup z Azure Portal.

To znamená, že pokud byste chtěli další interní podrobnosti o tom, jak to funguje, můžete se podívat na relaci z Connect() z minulého roku s vývojářem Nazim Lala. Děkujeme Jamesi Christiansonovi za jeho pomoc při ladění!

Sponzor: Věděli jste, že VSTS lze úzce integrovat s Octopus Deploy? Podívejte se na Damiana Bradyho a Briana A. Randella, jak vám ukážou, jak automatizovat nasazení z VSTS na Octopus Deploy, a předveďte nový panel VSTS Octopus Deploy widget. Sledujte nyní


Linux
  1. Nainstalujte Linux Mint s Windows 8 | Duální spouštění Windows 8 a Linux Mint 12

  2. Chyby s Vagrant a Ubuntu 12.10 s Rvm?

  3. Jak chytit Ctrl+C na Windows a Linux s Qt

  1. Monitorování hostitelů Linux a Windows pomocí Glances

  2. Duální spouštění Ubuntu Linux a Windows 7

  3. Zobrazit servisní štítek DELL a kód expresní služby z Linuxu a Windows

  1. Nastavte vývojové prostředí Ruby on Rails pomocí Docker a Docker Compose na Ubuntu

  2. Připojení a mapování sdílených položek mezi Windows a Linuxem pomocí Samby

  3. Vyrovnávání zátěže pomocí HAProxy, Nginx a Keepalived v Linuxu