GNU/Linux >> Belajar Linux >  >> Linux

Ruby on Rails di Azure App Service (Situs Web) dengan Linux (dan Ubuntu di Windows 10)

Menjalankan Ruby on Rails di Windows secara historis payah. Sebagian besar orang Ruby/Rails adalah pengguna Mac dan Linux dan belum fokus untuk membuat Rails dapat digunakan untuk pengembangan harian di Windows. Ada beberapa upaya heroik oleh sejumlah sukarelawan untuk membuat Rails bekerja dengan proyek-proyek seperti RailsInstaller, tetapi modul dan dependensi asli hampir selalu menyebabkan masalah. Terlebih lagi, saat Anda menerapkan aplikasi Rails, kemungkinan besar Anda menggunakan host Linux sehingga Anda mungkin mengalami perbedaan di antara sistem operasi.

Maju cepat ke hari ini dan Windows 10 memiliki "Linux Subsystem for Windows" (WSL) berbasis Ubuntu dan bash shell asli yang berarti Anda dapat menjalankan binari elf Linux nyata di Windows secara asli tanpa Mesin Virtual ... Pengembangan Rails berbasis Windows di Bash pada Windows.

Pengembangan Ruby on Rails sangat bagus di Windows 10 karena Anda memiliki Windows 10 yang menangani bagian UI "windows" dan bash dan Ubuntu yang menangani shell.

Setelah saya mengaturnya, saya ingin git menyebarkan aplikasi saya ke Azure, dengan mudah.

Mengembangkan Ruby on Rails di Windows 10 menggunakan WSL

Orang-orang Rails dan Ruby dapat apt-get update dan apt-get install Ruby, mereka dapat menginstal rbenv atau rvm sesuka mereka. Saat ini rbenv lebih disukai.

Setelah Anda menginstal Ubuntu di Windows 10, Anda dapat dengan cepat menginstal "rbenv" seperti ini di dalam Bash. Di sini saya mendapatkan 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

Ini adalah screenshot tengah proses di SurfaceBook saya. Langkah membangun/menginstal ini memakan waktu cukup lama dan banyak mempengaruhi disk, FYI.

Pada titik ini saya sudah mendapatkan Ruby, sekarang saya membutuhkan Rails, serta NodeJs untuk Rails Asset Pipeline. Anda dapat mengubah versi yang sesuai.

@ 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

Anda mungkin juga menginginkan PostgresSQL atau MySQL atau Mongo, atau Anda dapat menggunakan Cloud DB seperti Azure DocumentDB.

Saat Anda mengembangkan Windows dan Linux secara bersamaan, Anda mungkin ingin menyimpan kode Anda di satu tempat atau yang lain, bukan keduanya. Saya menggunakan titik pemasangan otomatis yang dibuat WSL di /mnt/c jadi untuk sampel ini saya di /mnt/c/Users/scott/Desktop/RailsonAzure yang memetakan ke folder di desktop Windows saya. Anda dapat berada di mana saja, cukup perhatikan pengaturan CR/LF Anda dan tetap berada di satu dunia.

Saya melakukan "rel baru." dan menjalankannya secara lokal. Di sini Anda dapat melihat Visual Studio Code dengan Ruby Extensions dan proyek saya terbuka di sebelah Bash di Windows.

Setelah saya menjalankan aplikasi Rails dan saya dapat mengembangkan dengan bersih, melompat antara Visual Studio Code di Windows dan prompt Bash dalam Ubuntu, saya ingin menyebarkan aplikasi ke web.

Karena ini adalah aplikasi rel default "Hello World" yang sederhana, saya tidak dapat menerapkannya di suatu tempat di mana Lingkungan Rel Produksi. Tidak ada Route di route.rb (pesan Yay! You're on Rails hanya untuk waktu pengembangan) dan tidak ada set variabel lingkungan SECRET_KEY_BASE yang digunakan untuk memverifikasi cookie yang ditandatangani. Saya perlu menambahkan dua hal itu. Saya akan mengubah route.rb dengan cepat untuk hanya menggunakan halaman Selamat datang default untuk demo ini, seperti ini:

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

Dan saya akan menambahkan SECRET_KEY_BASE sebagai App Setting/ENV var di portal Azure ketika saya membuat backend saya, di bawah.

Menyebarkan Aplikasi Ruby on Rails ke Layanan Aplikasi Azure di Linux

Dari menu Baru di portal Azure, pilih Aplikasi Web di Linux (dalam pratinjau pada saat saya menulis ini) dari opsi Web + Seluler. Ini akan membuat Paket Layanan Aplikasi yang memiliki Aplikasi di dalamnya. Ada banyak tumpukan aplikasi yang dapat Anda gunakan di sini termasuk node.js, PHP, .NET Core, dan Ruby.

CATATAN: Beberapa glosarium dan poin definisi. Layanan Aplikasi Azure adalah Azure PaaS (Platform as a Service). Anda menjalankan Aplikasi Web di Layanan Aplikasi Azure. Layanan Aplikasi Azure Rencana adalah Mesin Virtual yang mendasarinya (sall, medium, large, dll.) yang menghosting n jumlah Layanan Aplikasi/Situs Web. Saya memiliki 20 Layanan Aplikasi/Situs Web yang berjalan di bawah Paket Layanan Aplikasi dengan VM Kecil. Secara default ini adalah Windows dengan dapat menjalankan Php, Python, Node, .NET, dll. Dalam posting blog ini saya menggunakan Paket Layanan Aplikasi yang menjalankan Linux dan menghosting wadah Docker. Aplikasi My Rails akan hidup di dalam Layanan Aplikasi itu dan Anda dapat menemukan Dockerfiles dan info lainnya di sini https://github.com/Azure-App-Service/ruby atau gunakan gambar Docker Anda sendiri.

Di sini Anda dapat melihat Layanan Aplikasi Azure saya yang sekarang akan saya terapkan untuk menggunakan Git. Saya juga bisa FTP.

Saya masuk ke Deployment OPtions dan menyiapkan repro git lokal (ke Azure). Sekarang saya dapat melihatnya di bawah Ikhtisar.

Di bash lokal saya, saya menambahkan Azure sebagai remote. Ini dapat diatur namun alur kerja Anda diatur. Dalam hal ini, Git adalah FTP untuk kode.

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

Ini memulai penerapan saat kode didorong ke Azure.

PENTING :Saya juga akan menambahkan "RAILS_ENV=produksi" dan SECRET_KEY_BASE=ke Pengaturan Aplikasi Azure saya. Anda dapat membuat rahasia baru dengan "rake secret".

Jika saya mengalami masalah, saya dapat mengaktifkan Logging Aplikasi, Logging Server Web, dan Pesan Kesalahan Terperinci di bawah Log Diagnostik, lalu FTP ke Layanan Aplikasi dan melihat log.

Ini semua dalam Pratinjau sehingga Anda kemungkinan akan mengalami masalah. Mereka sangat sering memperbarui sistem yang mendasarinya. Beberapa gotcha yang saya dapatkan:

  • Menerapkan/menerapkan ulang memerlukan restart situs eksplisit, hari ini. Saya dengar itu akan segera diperbaiki.
  • Saya harus menggali file log keluar melalui FTP. Mereka akan mengekspos log di portal.
  • Saya menggunakan situs "sespan" Kudu di situs saya.scm .azurewebsite.net untuk mendapatkan akses shell ke wadah Kudu, tetapi saya ingin dapat ssh ke atau mendapatkan akses ke wadah yang sebenarnya berjalan dari Portal Azure suatu hari nanti.

Karena itu, jika Anda menginginkan detail internal lebih lanjut tentang cara kerjanya, Anda dapat menonton sesi dari Connect() tahun lalu dengan pengembang Nazim Lala. Terima kasih kepada James Christianson atas bantuan debugnya!

Sponsor: Tahukah Anda bahwa VSTS dapat berintegrasi erat dengan Octopus Deploy? Tonton Damian Brady dan Brian A. Randell saat mereka menunjukkan cara mengotomatiskan penerapan dari VSTS ke Octopus Deploy, dan mendemonstrasikan dasbor VSTS Octopus Deploy yang baru widget. Tonton sekarang


Linux
  1. Instal Linux Mint dengan Windows 8 | Dual Boot Windows 8 dan Linux Mint 12

  2. Kesalahan Dengan Vagrant Dan Ubuntu 12.10 Dengan Rvm?

  3. Lihat Tag Servis DELL dan Kode Servis Ekspres Dari Linux dan Windows

  1. Memantau host Linux dan Windows dengan Glances

  2. Boot ganda Ubuntu Linux dan Windows 7

  3. Cara menangkap Ctrl+C di Windows dan Linux dengan Qt

  1. Siapkan lingkungan Pengembangan Ruby on Rails dengan Docker dan Docker Compose di Ubuntu

  2. Memasang dan memetakan berbagi antara Windows dan Linux dengan Samba

  3. Load balancing dengan HAProxy, Nginx dan Keepalive di Linux