GNU/Linux >> Tutoriales Linux >  >> Linux

Ruby on Rails en Azure App Service (sitios web) con Linux (y Ubuntu en Windows 10)

Ejecutar Ruby on Rails en Windows ha sido históricamente malo. La mayoría de la gente de Ruby/Rails son usuarios de Mac y Linux y no se han centrado en hacer que Rails sea utilizable para el desarrollo diario en Windows. Ha habido algunos esfuerzos heroicos por parte de varios voluntarios para que Rails funcione con proyectos como RailsInstaller, pero los módulos nativos y las dependencias casi siempre causan problemas. Aún más, cuando vaya a implementar su aplicación Rails, es probable que esté utilizando un host Linux, por lo que puede encontrarse con diferencias entre los sistemas operativos.

Avance rápido hasta hoy y Windows 10 tiene el "Subsistema de Linux para Windows" (WSL) basado en Ubuntu y el shell bash nativo, lo que significa que puede ejecutar binarios elf de Linux reales en Windows de forma nativa sin una máquina virtual... por lo que debe hacer su Desarrollo de Rails basado en Windows en Bash en Windows.

El desarrollo de Ruby on Rails es excelente en Windows 10 porque Windows 10 maneja la parte de la interfaz de usuario de "Windows" y bash y Ubuntu manejan el shell.

Después de configurarlo, quiero implementar mi aplicación en Azure fácilmente.

Desarrollo en Ruby on Rails en Windows 10 usando WSL

La gente de Rails y Ruby puede apt-get update y apt-get install ruby, pueden instalar rbenv o rvm como quieran. En estos días se prefiere rbenv.

Una vez que tenga instalado Ubuntu en Windows 10, puede instalar rápidamente "rbenv" como este dentro de Bash. Aquí estoy obteniendo 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

Aquí hay una captura de pantalla a mitad del proceso en mi SurfaceBook. Este paso de compilación/instalación lleva un tiempo y golpea mucho el disco, FYI.

En este punto, tengo Ruby, ahora necesito Rails, así como NodeJs para Rails Asset Pipeline. Puede cambiar las versiones según corresponda.

@ 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

Es probable que también desee PostgresSQL, MySQL o Mongo, o puede usar una base de datos en la nube como Azure DocumentDB.

Cuando esté desarrollando en Windows y Linux al mismo tiempo, probablemente querrá mantener su código en un lugar o en el otro, no en ambos. Uso el punto de montaje automático que WSL crea en /mnt/c, por lo que para esta muestra estoy en /mnt/c/Users/scott/Desktop/RailsonAzure, que se asigna a una carpeta en mi escritorio de Windows. Puede estar en cualquier lugar, solo tenga en cuenta la configuración de CR/LF y quédese en un mundo.

Hice un "rails new". y lo hizo funcionar localmente. Aquí puede ver Visual Studio Code con Ruby Extensions y mi proyecto abierto junto a Bash en Windows.

Una vez que tengo una aplicación de Rails ejecutándose y puedo desarrollarla limpiamente, saltando entre Visual Studio Code en Windows y el indicador de Bash en Ubuntu, quiero implementar la aplicación en la web.

Dado que esta es una aplicación de rieles predeterminada "Hello World" simple, no puedo implementarla en algún lugar donde el entorno de Rails sea Producción. No hay una ruta en route.rb (el mensaje Yay! You're on Rails es solo en tiempo de desarrollo) y no hay un conjunto de variables de entorno SECRET_KEY_BASE que se use para verificar las cookies firmadas. Tendré que agregar esas dos cosas. Cambiaré las rutas.rb rápidamente para usar la página de bienvenida predeterminada para esta demostración, como esta:

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

Y agregaré SECRET_KEY_BASE como una configuración de aplicación/var ENV en Azure Portal cuando haga mi backend, a continuación.

Implementación de la aplicación Ruby on Rails en Azure App Service en Linux

En el menú Nuevo de Azure Portal, elija Aplicación web en Linux. (en vista previa al momento de escribir esto) desde la opción Web + Móvil. Esto creará un plan de servicio de aplicaciones que tiene una aplicación dentro. Hay un montón de pilas de aplicaciones que puede usar aquí, incluidas node.js, PHP, .NET Core y Ruby.

NOTA: Algunos puntos de glosario y definición. Azure App Service es Azure PaaS (Plataforma como servicio). Ejecuta Web Apps en Azure App Service. Un plan de Azure App Service es la máquina virtual subyacente (sall, medium, large, etc.) que aloja n número de servicios de aplicaciones/sitios web. Tengo 20 servicios de aplicaciones/sitios web que se ejecutan con un plan de servicio de aplicaciones con una máquina virtual pequeña. De forma predeterminada, Windows puede ejecutar Php, Python, Node, .NET, etc. En esta publicación de blog, uso un plan de servicio de aplicaciones que ejecuta Linux y aloja contenedores Docker. La aplicación My Rails vivirá dentro de ese servicio de aplicaciones y puede encontrar los Dockerfiles y otra información aquí https://github.com/Azure-App-Service/ruby o usar su propia imagen de Docker.

Aquí puede ver mi Azure App Service que ahora implementaré usando Git. También podría usar FTP.

Entré en OPciones de implementación y configuré una reproducción de git local (a Azure). Ahora puedo verlo en Resumen.

En mi bash local agrego azure como control remoto. Esto se puede configurar sin importar cómo esté configurado su flujo de trabajo. En este caso, Git es FTP para código.

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

Esto inicia la implementación a medida que el código se envía a Azure.

IMPORTANTE :También agregaré "RAILS_ENV=producción" y SECRET_KEY_BASE=a la configuración de mi aplicación de Azure. Puedes crear un nuevo secreto con "rake secret".

Si tengo problemas, puedo activar el Registro de la aplicación, el Registro del servidor web y los Mensajes de error detallados en Registros de diagnóstico y luego enviar FTP al Servicio de aplicaciones y ver los registros.

Todo esto está en versión preliminar, por lo que es probable que tenga problemas. Están actualizando los sistemas subyacentes muy a menudo. Algunas trampas que encontré:

  • La implementación/reimplementación requiere un reinicio explícito del sitio hoy. Escuché que eso se arreglará pronto.
  • Tuve que desenterrar los archivos de registro a través de FTP. Van a exponer registros en el portal.
  • Usé el sitio "sidecar" de Kudu en mysite.scm .azurewebsite.net para obtener acceso de shell al contenedor de Kudu, pero me gustaría poder ingresar o acceder al contenedor en ejecución real desde Azure Portal algún día.

Dicho esto, si desea obtener más detalles internos sobre cómo funciona esto, puede ver una sesión de Connect() el año pasado con el desarrollador Nazim Lala. ¡Gracias a James Christianson por su ayuda con la depuración!

Patrocinador: ¿Sabía que VSTS puede integrarse estrechamente con Octopus Deploy? Mire a Damian Brady y Brian A. Randell mientras le muestran cómo automatizar implementaciones de VSTS a Octopus Deploy, y demuestre el nuevo panel de VSTS Octopus Deploy. artilugio. Ver ahora


Linux
  1. Monitoreo de hosts Linux y Windows con Glances

  2. Instalar Linux Mint con Windows 8 | Arranque dual Windows 8 y Linux Mint 12

  3. ¿Errores con Vagrant y Ubuntu 12.10 con Rvm?

  4. Ver la etiqueta de servicio DELL y el código de servicio rápido desde Linux y Windows

  5. Cómo capturar Ctrl+C en Windows y Linux con Qt

Ruby on Rails en Windows no solo es posible, es fabuloso usando WSL2 y VS Code

Desarrollo Web y Técnicas Avanzadas con Linux sobre Windows (WSL)

Ubuntu ahora en la tienda de Windows:actualizaciones de Linux en Windows 10 y consejos importantes

Acceso remoto a Windows 10 a través de Ubuntu Linux y Vise Versa

Los 20 mejores alojamientos web Linux para sitios personales y empresas

Cómo instalar y configurar el servicio Gogs Git en Ubuntu Linux