¿Qué sucede cuando creas un nuevo proyecto de Rails?

La primera vez que abre su terminal y escribe rails newla gran cantidad de archivos y carpetas que se crean puede ser abrumadora. Incluso puede trabajar en numerosos proyectos de Rails sin tener que abrir muchas de estas carpetas, entonces, ¿qué son exactamente? ¿Qué están haciendo detrás de escena?

Bueno, la verdad es que no necesita muchos de ellos y Rails tiene varios indicadores integrados en el newcomando que le permitirán crear un nuevo proyecto sin algunos de los valores predeterminados de Rails (para obtener más información, simplemente escriba rails new —help) . Dicho esto, para la mayoría de los proyectos, estará ejecutando rails newy creando una carpeta de proyecto bestial.

En esta publicación, revisaré todos los archivos y carpetas de un nuevo proyecto de Rails 6. Siéntase libre de usar esto como referencia mientras trabaja en su nuevo proyecto Rails para comprender algunas de las carpetas más oscuras. Marque esta publicación y vuelva a ella cada vez que se encuentre en medio de un nuevo proyecto de Rails.

Entonces comencemos:

rails new example-project

¡Wow eso es mucho!

Primero, Rails está creando todos los archivos y carpetas requeridos por una nueva aplicación Rails.

Luego es buscar gemas y empaquetarlas; estas son las dependencias que Rails necesita para ejecutar su sitio web en su iteración más simple. ¿Parece mucho? Hasta cierto punto lo es, pero estas gemas agregan la funcionalidad que hace que un proyecto Rails sea tan fácil de despegar. Básicamente, todo lo que necesita hacer ahora es ejecutar rails servery tiene una aplicación web ejecutándose localmente: eso es bastante poderoso y no es algo que pueda obtener tan fácilmente / sin / todo ese texto estándar.

Entremos en todas esas carpetas:

 create README.md create Rakefile create .ruby-version create config.ru create .gitignore create Gemfile run git init from "." Initialized empty Git repository in /Users/tfantina/Documents/Code/FileStructure/.git/ create package.json create app create app/assets/config/manifest.js create app/assets/stylesheets/application.css create app/channels/application_cable/channel.rb create app/channels/application_cable/connection.rb create app/controllers/application_controller.rb create app/helpers/application_helper.rb create app/javascript/channels/consumer.js create app/javascript/channels/index.js create app/javascript/packs/application.js create app/jobs/application_job.rb create app/mailers/application_mailer.rb create app/models/application_record.rb create app/views/layouts/application.html.erb create app/views/layouts/mailer.html.erb create app/views/layouts/mailer.text.erb create app/assets/images/.keep create app/controllers/concerns/.keep create app/models/concerns/.keep create bin create bin/rails create bin/rake create bin/setup create bin/yarn create config create config/routes.rb create config/application.rb create config/environment.rb create config/cable.yml create config/puma.rb create config/spring.rb create config/storage.yml create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb create config/initializers create config/initializers/application_controller_renderer.rb create config/initializers/assets.rb create config/initializers/backtrace_silencers.rb create config/initializers/content_security_policy.rb create config/initializers/cookies_serializer.rb create config/initializers/cors.rb create config/initializers/filter_parameter_logging.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_framework_defaults_6_0.rb create config/initializers/wrap_parameters.rb create config/locales create config/locales/en.yml create config/master.key append .gitignore create config/boot.rb create config/database.yml create db create db/seeds.rb create lib create lib/tasks create lib/tasks/.keep create lib/assets create lib/assets/.keep create log create log/.keep create public create public/404.html create public/422.html create public/500.html create public/apple-touch-icon-precomposed.png create public/apple-touch-icon.png create public/favicon.ico create public/robots.txt create tmp create tmp/.keep create tmp/cache create tmp/cache/assets create vendor create vendor/.keep create test/fixtures create test/fixtures/.keep create test/fixtures/files create test/fixtures/files/.keep create test/controllers create test/controllers/.keep create test/mailers create test/mailers/.keep create test/models create test/models/.keep create test/helpers create test/helpers/.keep create test/integration create test/integration/.keep create test/channels/application_cable/connection_test.rb create test/test_helper.rb create test/system create test/system/.keep create test/application_system_test_case.rb create storage create storage/.keep create tmp/storage create tmp/storage/.keep 

Saltemos en:

cd example-project code . 

Iremos en el orden en que Rails los organice, en su mayor parte, hablaré de cada carpeta y archivo, para archivos repetidos (como .keep) solo lo mencionaré una vez. Usted notará una gran cantidad de convenciones en rieles tales como “application_ [Marco] s” ( application_controller.rb, application_helper.rb, application_job.rbetc.). En tales casos, cubriré la carpeta en detalle para que sepa lo que hay dentro, solo sepa que el archivo existente "aplicación _ [...]. Rb" es una clase principal de la que heredarán otras clases que cree en la carpeta.

La carpeta de la aplicación

Es donde se llevará a cabo la mayor parte de su trabajo de desarrollo / la aplicación contiene los modelos, vistas y controladores que se servirán a los usuarios cuando lo solicite el navegador.

aplicación / activos

Almacena activos para Rails Asset Pipeline. Asset Pipeline reúne los activos (JavaScript, CSS e imágenes) en un proyecto y los entrega al cliente de la manera más eficiente posible. Lo hace concatenando y minificando activos. También precompila activos escritos en Sass y CoffeeScript.

Más información: The Asset Pipeline - Ruby on Rails Guides

app / assets / config

Vea abajo

app / assets / config / manifest.js

El canal de activos antes mencionado es administrado por una gema de Ruby llamada "Sprockets-rails" que hace todo lo anterior. "Sprockets-rails" tiene algunas gemas auxiliares asociadas como "sass-rails", "uglifier" y "coffee-rails". Coffee-rails y Sass-rails precompilan su Sass y CoffeeScript en CSS y JavaScript mientras Uglifier minimiza estos activos. Manifest.js le permite establecer específicamente lo que se va a precompilar.

Para obtener más información sobre este archivo específico, consulte: eileen.codes | Rails 5: El manifiesto de Sprockets 4

app / assets / images

Los activos de imagen, como iconos y SVG para la canalización de activos, se pueden colocar aquí.

.mantener

Este es el primero de muchos archivos .keep que verá a lo largo de un nuevo proyecto de Rails. Estos no son archivos Rails sino archivos para Git que normalmente no rastrearán las carpetas vacías. La Torre del homenaje. archivo solo dice "alguien está aquí". Todo lo que tenga un archivo .keep será rastreado por Git. No necesita .keep si pone algo más en la carpeta.

aplicación / activos / hojas de estilo

La carpeta de hojas de estilo es donde colocará los estilos asociados con su aplicación. Puede escribir hojas de estilo en CSS o SASS desde el primer momento. Asset Pipeline precompilará todas y cada una de las hojas de estilo.

app / assets / stylesheets / application.css

Contiene todos los estilos que se incluirán en la canalización de activos. Los estilos globales se pueden escribir en Application.css pero también puede escribir hojas de estilo específicas del controlador (cuando ejecuta el comando rails g  para crear un nuevo controlador, se creará una hoja de estilo asociada.   =require_tree . Es la forma de Rails de incluir todas las carpetas asociadas dentro de un directorio, por lo que cualquier otro CSS Los archivos dentro de este proyecto se incluirán cuando se compilen =require_selfincluirán cualquier CSS que escriba dentro del archivo Application.css en sí, esto es específico de la ubicación, por lo que el CSS dentro de Application.css se ejecutará / después / las otras carpetas que son extraídas porrequire_tree .

.app / canales

Rails tiene numerosos marcos internos más pequeños. ActionCable es un marco que le permite usar WebSockets para crear funciones en tiempo real en su aplicación, como chats y "suscripciones" de actualización automática a notificaciones y contenido nuevo. Si no va a implementar ninguna función en tiempo real, no necesita preocuparse por las carpetas de ActionCable. La carpeta de canales contiene los archivos Ruby del lado del servidor para crear estas conexiones.

Puede leer todo sobre ActionCable aquí: Descripción general del cable de acción - Guías de Ruby on Rails

app / channels / application_cable

Application_cable contiene archivos de canal y conexión para crear nuevas funciones en tiempo real en su aplicación.

app / channels / application_cable / channel.rb

Cada función individual en tiempo real de su aplicación se encapsularía en un canal de canal individual. Por ejemplo, una función de chat de chat, podría ser un canal. Un sistema de notificación para contenido recién publicado sería un canal separado. Esta carpeta contiene todos los canales de su aplicación.

app / channels / application_cable / connection.rb

Las conexiones son la autenticación entre el usuario y el servidor. No manejan ninguna lógica (eso es lo que hacen los canales), sino que solo verifican para asegurarse de que el usuario actual esté autorizado para suscribirse a los diversos canales en su aplicación. En la mayoría de los casos, esto sería una simple verificación de que el usuario inició sesión.

aplicación / controladores

Parte “C” del patrón “MVC” en Controladores de vista de modelo. Los controladores como intermediarios entre el modelo y la vista. Según la solicitud del usuario, el controlador tomará cualquier dato asociado del modelo y lo pasará a la vista que se muestra al usuario. Por ejemplo, si un usuario está navegando a la página localhost: 3000 / posts, el Controlador determinará qué Vista se muestra, así como cualquier registro asociado del Modelo.

aplicación / controladores / preocupaciones

Las inquietudes son una forma de reducir sus modelos, en lugar de escribir una gran cantidad de métodos reutilizables en un solo modelo, puede convertir esos métodos en inquietudes donde se pueden reutilizar fácilmente en sus controladores.

app / controllers / application_controller.rb

Los controladores son solo clases ruby ​​que heredan de una clase llamada ActionController. A medida que agregue más modelos a su proyecto, tendrá más controladores con los que lidiar. application_controller.rb es necesario para cualquier proyecto Rails porque hereda ActionController::Basey todos los futuros controladores internos lo heredarán, dándoles la funcionalidad de Controllers.

Verá muchos archivos "application_ [insertar título relativo aquí] .rb": application_controller.rb, application_helper.rb, application_record.rb. En la mayoría de los casos, estos representan una forma global de interactuar con la aplicación, un intermediario que hereda de una clase base y luego es heredado por clases futuras o ambas. No discutiré las funciones de estos archivos en todos los casos.

aplicación / ayudantes

Los ayudantes son una forma de mantener ordenadas sus opiniones. Las vistas deben preocuparse simplemente por mostrar información como html al usuario. Si encuentra que sus archivos html.erb se atascan con muchos pequeños cálculos o lógica, debe mover ese código a métodos auxiliares.

app / helpers / application_helper.rb

Proporciona un lugar para escribir ayudantes globales, a medida que crea más controladores, tendrá más ayudantes para trabajar con controladores y vistas específicos.

aplicación / javascript

Esta carpeta es un lugar útil para poner todo el javascript que usa en su aplicación, Rails Asset Pipeline los incluirá desde esta carpeta en cualquier página donde se apliquen (Asset Pipeline sabe dónde pertenecen los scripts porque los archivos, normalmente, siguen un la convención de nomenclatura del controlador también se aplican).

app / javascript / channels

Ya hemos visto los canales de ActionCable anteriores, pero esta carpeta contiene javascript específico del lado del cliente para crear conexiones WebSocket en tiempo real.

app / javascript / channels / consumer.js

Los consumidores son los clientes de una conexión WebSocket; los usuarios finales que se suscriben al canal. Este script conectará a esos consumidores con el canal del lado del cliente.

app / javascript / channels / index.js

Una aplicación puede tener múltiples canales (chat, alertas, publicaciones nuevas, etc.). index.js es un directorio del lado del cliente de todos los canales en su aplicación.

app / javascript / packs / application.js

Webpacker es una joya rubí que le permite utilizar Webpack, el paquete de JavaScript en su proyecto Rails. Funciona en conjunto con Asset Pipeline y está destinado a grandes marcos de JavaScript, no a pequeños scripts u otros activos como CSS o imágenes (que Webpack generalmente manejaría en un proyecto de Javascript). Webpacker, sin embargo, es flexible y esto es solo el predeterminado. Si lo desea, puede hacer que Webpack maneje imágenes y JavaScripts más pequeños sin pasar por alto el Asset Pipeline. Puede especificar eso en esta carpeta requiriendo diferentes activos. Los activos predeterminados que se empaquetan son:

*require("@rails/ujs").start()* *require("turbolinks").start()* *require("@rails/activestorage").start()* *require("channels")* 

aplicación / trabajos

Los trabajos son tareas en segundo plano que ejecuta mientras los usuarios continúan usando su aplicación. Siempre que tenga una operación que involucrará mucho procesamiento, lo suficiente como para ralentizar significativamente la experiencia del usuario y hacer que su aplicación se "cuelgue", debe crear un fondo trabajo que ejecutará la tarea detrás de escena permitiendo al usuario continuar usando su sitio ininterrumpidamente.

Para obtener más información sobre trabajos, consulte: Tutorial de trabajo activo de Rails: Cómo utilizar activejob | Codificación | a través de @codeship

app / assets / jobs / application_job.rb

Véase más arriba.

aplicación / mailers

Puede pensar en los remitentes de correo como controladores de los correos electrónicos. Puede crear un nuevo correo con Rails generate mailer. Esto le dará el equivalente a un modelo y un controlador para enviar correos electrónicos a sus usuarios.

app / mailers / application_mailer.rb

Véase más arriba.

aplicación / modelos

La "M" de MVC; un modelo es una plantilla para los datos almacenados en su base de datos. Generalmente, cualquier tabla se considera un "Modelo". Los modelos comunes pueden ser   User,   Post  o   Comment. Tenga en cuenta que estas cosas son singulares en lugar de plurales, esto es una referencia a la naturaleza prototípica de un modelo. Esto contrasta con los controladores por qué por convención son plurales porque los controladores hacen referencia a varios registros.

aplicación / modelos / preocupaciones

Las preocupaciones son los módulos: pequeñas pepitas de código reutilizable que generalmente se extraen de los modelos cuando engordan demasiado. La carpeta Concerns es parte de un marco interno de Rails llamado ActiveSupport que hace que los módulos sean un poco más fáciles de administrar.

Para obtener más información, consulte las guías de Rails sobre inquietudes.

app / models / application_record.rb

Application_record.rb hereda de ActiveRecord::Basetodos los modelos posteriores en su aplicación heredará ApplicationRecord, de manera similar a cómo Application_controller hace que la funcionalidad de la ActionControlleresté disponible para todos los demás controladores.

aplicación / vistas

La última pieza del patrón MVC son Vistas. La carpeta Vistas contiene todo lo que el usuario verá en su navegador, principalmente en forma de HTML con Ruby incrustado (ERB) o .Haml, que es un lenguaje de plantillas para Ruby. Lo más probable es que los nuevos controladores tengan una carpeta de vista asociada con el mismo nombre (a menos que esté creando una API). En términos generales, todos los métodos del controlador tendrán una vista asociada.

aplicación / vistas / diseños

Su nueva aplicación Rails tendrá una carpeta Layouts con application.html.erb , mailer.html.erb y mailer.text.erb, estos establecen diseños globales para la aplicación Rails en varios dominios, como el navegador y la bandeja de entrada. Es posible que desee agregar otros componentes de un diseño a esta carpeta, por ejemplo, un _header.html.erb, pero la mayoría de sus vistas se organizarán en carpetas de vistas específicas de su controlador. Application.html.erb es la plantilla principal para su aplicación, este archivo crea el HTML principal y las etiquetas para su aplicación con las propias vistas que se muestran en . El rendimiento es solo un poco de código Ruby que agrega la vista adecuada para la página que el usuario está mirando. Tener unEl archivo Application.html.erb mantiene su código SECO ya que no tiene que declarar repetidamente un tipo de documento, elementos de cabecera o incluir scripts y hojas de estilo, para cada página en la Vista. Rails y Asset Pipeline se encargan de esto por usted. Los tres archivos en esta carpeta como se indicó anteriormente son:

  • app / views / layouts / application.html.erb
  • app / views / layouts / mailer.html.erb
  • app / views / layouts / mailer.text.erb

carpeta bin

La carpeta bin ayuda a configurar la aplicación Rails para que esta y los comandos asociados puedan ejecutarse correctamente.

papelera / paquete

Asegura que el Gem Bundler funcione correctamente.

contenedor / rieles

Spring es un precargador que mantiene a Rails ejecutándose en segundo plano mientras trabajas (hay algunos casos en los que necesitas reiniciar el servidor, pero en su mayor parte los cambios en las Vistas o Controladores se cargarán automáticamente e inmediatamente en tu aplicación que se ejecuta en un desarrollo medio ambiente). Este archivo carga el resorte cuando inicia la aplicación Rails.

contenedor / rastrillo

Rake significa Ruby Make y se usa para ejecutar varios comandos que configurarán y actualizarán el servidor.

bin / setup

Le permite escribir comandos que se ejecutarán cuando su aplicación se inicie por primera vez.

contenedor / resorte

Permite que Spring se ejecute sin usar el Bundler para agrupar todas tus gemas, esto permite que Spring recargue rápidamente tus páginas en desarrollo cada vez que realizas un cambio.

bin / paquete web

Como se mencionó anteriormente, Rails usa Webpack para empaquetar algunos JavaScripts en lugar de AssetPipeline, este archivo requiere la configuración necesaria y luego ejecuta Webpack.

bin / webpack-dev-server

Le permite personalizar el servidor de desarrollo de Webpack, lo que quizás desee hacer si no desea que algunos o todos sus activos se incluyan en su entorno de desarrollo.

contenedor / hilo

Yarn es un administrador de paquetes de JavaScript similar a NPM. Puede usar cualquiera de los dos con proyectos Rails.

config

Config, al igual que su nombre lo indica, contiene archivos para configurar su aplicación Rails en diferentes entornos; desarrollo y prueba.

config / entornos

Esta carpeta le permite configurar cómo funcionará su aplicación en entornos de desarrollo, producción y pruebas. Por ejemplo, es posible que desee asegurarse de que su action_mail esté configurado para enviar correos electrónicos a través de un servicio de correo en producción pero no en desarrollo.

config / initializers

Esta carpeta le permite configurar inicializadores granulares para definir cómo funcionará su aplicación Rails; es muy probable que no pase demasiado tiempo aquí, especialmente cuando trabaje en sus primeras aplicaciones Rails.

config / initializers / application_controller_renderer.rb

Permite a los controladores renderizar fuera de su alcance. Para obtener más información, consulte: Actualización a Ruby on Rails 5.0 desde Rails 4.2 - caso de uso de la aplicación - Ejecución con Ruby

config / initializers / assets.rb

Se relaciona con la cartera de activos; que, como recordará, sirve páginas en su aplicación Rails con los activos específicos (CSS, JS, etc.) que necesitan. Aquí, puede agregar activos a la ruta de carga, como node_modules.

config / initializers / backtrace_silencers.rb

Backtraces es una herramienta de depuración que le permite ver lo que está sucediendo en su aplicación Rails, particularmente útil cuando las cosas explotan y puede identificar el área específica de falla. Configure lo que muestran los backtraces determinando qué bibliotecas pueden mostrar backtraces en este archivo.

config / initializers / content_security_policy.rb

De Mozilla: “El encabezado de respuesta HTTP Content-Security-Policy permite a los administradores del sitio web controlar los recursos que el agente de usuario puede cargar para una página determinada. Con algunas excepciones, las políticas implican principalmente la especificación de los orígenes del servidor y los puntos finales del script. “Content-Security-Policy - HTTP | MDN. En esencia, esto controla los datos que pueden fluir hacia su aplicación y de qué fuentes externas. Por ejemplo, vincular a scripts, fuentes o imágenes externas fuera de su aplicación.

config / initializers / cookies_serializer.rb

Determina el formato de las cookies, por defecto es :json

config / initializers / filter_parameter_logging.rb

Discutiremos el registro a continuación, pero hay algunos parámetros (entradas de usuario aceptadas) como contraseñas o datos confidenciales del usuario que no desea que aparezcan en su registro, puede agregarlos aquí. filter_paramiter_logging es algo así como .gitignore para los parámetros.

config / initializers / inflections.rb

Como se discutió en la explicación del modelo, Rails tiene convenciones de nomenclatura para lo que es singular y plural. Según las configuraciones regionales (la configuración de idioma de su aplicación, consulte la carpeta Locales a continuación), puede actualizar estas inflexiones en este inicializador, aunque probablemente no sea una buena idea a menos que sea absolutamente necesario.

config / initializers / mime_types.rb

Tipos MIME: las extensiones multipropósito de correo de Internet especifican el formato de los archivos adjuntos al correo electrónico.

MIME - Wikipedia

config / initializers / wrap_parameters.rb

De forma predeterminada, Rails envuelve todos los parámetros en JSON, pero puede especificar otros formatos usando el wrap_parametershash. ActionController :: ParamsWrapper

config / locales

Generalmente se carga con en.yml como único archivo. Si su aplicación va a tener múltiples opciones de idioma, puede incluir todas las traducciones como archivos YML aquí.

config / webpack

Allows you to configure Webpack settings based on the environment. 

config / webpack / development.js

config / webpack / environment.js

config / webpack / production.js

config / webpack / test.js

config / application.rb

Ejecutará el archivo boot.rb si está utilizando Passenger. Extrae todas las gemas que ha requerido en el archivo de gemas en su proyecto y crea una clase Applicationque hereda deRails::Application

config / boot.rb

Crea una variable de entorno BUNDLE_GEMFILEestablecida en la ubicación del archivo de gemas de su proyecto, así es como Rails sabrá dónde extraer dependencias o gemas, de las cuales hay aproximadamente 2 docenas en una instalación de Rails lista para usar.

config / cable.yml

Similar a database.yml (ver más abajo) cable.yml establece adaptadores de desarrollo, prueba y producción para ActionCable, que recordará es la forma en que Rails implementa características en tiempo real en su aplicación.

config / credentials.yml.enc

credentials.yml reemplaza secrets.yml como la ubicación de las claves secretas. Este archivo está cifrado para que nadie pueda leer sus claves secretas y solo se descifra con la clave maestra (ver más abajo).

config / database.yml

Puede configurar una base de datos predeterminada (para hacer que su código sea un poco más SECO), así como bases de datos específicas para desarrollo, prueba y producción.

config / environment.rb

La inicialización de la aplicación Rails en el servidor requiere muchos pasos, dependiendo de si está utilizando rails servero Passenger, estos pasos pueden ser ligeramente diferentes, pero una vez que se carga environment.rb, la aplicación se inicializa y comienza a ejecutarse.

config / master.key

Lanza esto a tu archivo .gitignore de inmediato (ver más abajo), esta es la clave maestra que descifra credentials.yml.enc en Rails y nadie debería tenerla. Para obtener más información, puede leer este brillante artículo: Credenciales de Rails 5.2 - cedarcode - Medium

config / puma.rb

Puma es un servidor web para Ruby y es el servidor web predeterminado para el entorno de desarrollo de Rails. Puede configurar Puma a través de esta carpeta modificando cosas como el número de subprocesos y el puerto predeterminado en el que Puma escuchará las solicitudes entrantes (el valor predeterminado es 3000).

config / routes.rb

Las rutas son la hoja de ruta alrededor de sus controladores. Las rutas llevan las solicitudes entrantes al servidor y las dirigen al controlador correcto. A diferencia de la mayoría de los otros archivos en la carpeta de configuración, pasará mucho tiempo aquí configurando rutas mientras construye su aplicación.

config / spring.rb

Como se explica en la carpeta bin, Spring es un precargador, este archivo en realidad le dice a Spring qué archivos y carpetas deben activar un reinicio.

config / storage.yml

ActiveStorage es un marco introducido en Rails 5.2 para cargar y almacenar activos como imágenes. Necesita un lugar para colocar esas cosas, como una instancia de AWS, especifica esa ubicación en este archivo.

config / webpacker.yml

Le permite agregar entornos adicionales también Webpacker.

db

db / semillas

Seeds te permite llenar una base de datos con datos. Digamos que desea ver su función de paginación en acción; podría crear 11 publicaciones a mano o simplemente podría usar una gema como Faker para crear 11 publicaciones aleatorias para usted e insertarlas directamente en su base de datos.

lib

Las guías de Rails definen Lib como "módulos extendidos para su aplicación". Si esto suena vago, no eres el único que se siente así. Lo que va específicamente en la carpeta lib es algo controvertido: consulte ¿Qué va en Rails lib / - Programación extrema - Medio y Qué código va en el directorio lib /? pero el consenso general es que lib debería reservarse para el código que no cabe en la carpeta de la aplicación, que podría extraerse fácilmente para su uso en otras aplicaciones. Tiene dos subcarpetas activos y tareas.

lib / assets

De las guías de Ruby on Rails:

"lib / assets es para el código de sus propias bibliotecas que realmente no encaja en el alcance de la aplicación o las bibliotecas que se comparten entre aplicaciones".

lib / tasks

Puede escribir raketareas personalizadas y ponerlas en esta carpeta. No es una ubicación de uso muy común.

Iniciar sesión

El registro es una forma importante de ver el rendimiento de su aplicación y de encontrar y solucionar problemas. De forma predeterminada, esta carpeta estará vacía. Puede inicializar varios registradores en la carpeta de configuración / entornos con un comando como: config.log_level = :infodesde allí, mientras ejecuta su aplicación, se creará el archivo de registro. Para obtener información más detallada, consulte este excelente artículo de Datadog: Cómo recopilar, personalizar y administrar los registros de la aplicación Rails

Incluido en la carpeta Log:

  • log / development.log

módulos_nodo

Cualquier paquete de nodos que esté utilizando en su proyecto (como Webpack y Babel) dependerá de docenas, si no cientos, de otros paquetes de nodos. Un administrador de paquetes como NPM o Yarn administrará estos paquetes por usted. No debe ingresar a esta carpeta ni editar nada en ella.

público

La carpeta pública contiene recursos que son externos y se puede acceder a ellos fuera de la estructura normal de su aplicación, favicon, apple-touch-icons, robots.txt y, por supuesto, páginas de error. Páginas como: 404, 422 y 500. Si la aplicación en producción experimenta algún tipo de error, estas páginas HTML se servirán automáticamente sin pasar por rutas, controladores o vistas específicas. Estas páginas no forman parte de Rails Asset Pipeline, por lo que deberá escribir cualquier estilo en línea.

public / robots.txt

Le permite especificar cómo los motores de búsqueda rastrean su sitio web.

almacenamiento

Rails 5.2 introdujo ActiveStorage que reemplazó gemas como PaperClip y permite que Rails interactúe directamente con servicios en la nube como AWS o Google.

prueba

¡Rails tiene pruebas integradas desde cero! El conjunto de pruebas predeterminado en Rails es MiniTest, por lo que encontrará que todas estas carpetas están listas para funcionar con MiniTest.

Hay carpetas en las que puede probar controladores, ayudantes, modelos y anuncios de correo específicos, así como escribir pruebas de integración que funcionan en varios controladores y recrear algo similar a la experiencia real del usuario. Para obtener más información sobre lo que constituye una prueba de controlador frente a una prueba de integración, recomiendo este artículo de (Jason Swett)

prueba / canales

test / channels / application_cable / connection_test.rb

Prueba las conexiones de ActionCable como todas las cosas de ActionCable, solo lo necesitará si está utilizando canales en su aplicación.

prueba / controladores

Puede probar sus controladores aquí, estas pruebas generalmente analizan qué tan bien va su controlador entre el modelo y la vista, tienen un alcance más grande que las pruebas del modelo, pero más pequeñas que las pruebas de integración.

prueba / accesorios

No es un lugar para escribir pruebas, sino para generar datos de prueba ficticios. Dentro de la carpeta de accesorios puede agregar cualquier cantidad de archivos YML con datos predefinidos. Puede incorporar estos datos en sus pruebas para asegurarse de que sus modelos funcionen correctamente e interactúen con la aplicación como se esperaba.

prueba / accesorios / archivos

Ahora que Rails tiene el manejo de archivos integrado con ActiveStorage, no solo puede probar datos de modelos, sino que también puede probar archivos.

prueba / ayudantes

Puede escribir pruebas específicas para los ayudantes que tiene en la aplicación / ayudantes. Probar ayudantes no es demasiado común, pero puede hacerlo si un ayudante es demasiado complejo o parece frágil.

prueba / integración

Las pruebas de integración le permiten probar las interacciones entre controladores y brindan una opción de prueba más cercana a la experiencia real del usuario.

prueba / mailers

Incluso puede escribir pruebas para sus remitentes de correo para asegurarse de que los correos electrónicos se envíen correctamente y tengan el formato adecuado.

prueba / modelos

Una de las pruebas más granulares; puede asegurarse de que un registro se guarde correctamente, que la base de datos se haya actualizado, etc.

sistema de prueba

Las pruebas del sistema son una forma de probar su aplicación en un navegador real que genera capturas de pantalla para mostrarle cómo se ve todo en acción. Las pruebas del sistema también probarán el JavaScript, no es que deba usar las pruebas del sistema MiniTest como reemplazo de una buena biblioteca de pruebas de JavaScript como Jest. Pruebas del sistema; sin embargo, le permitirá ver cómo funciona su JavaScript en el navegador.

test / application_system_test_case.rb

Este archivo contiene los valores predeterminados para las pruebas de su sistema, puede cambiar los navegadores, los controladores o la resolución de la pantalla.

test / test_helper.rb

El asistente de prueba trae datos externos y bibliotecas que son necesarios para las pruebas. Notarás que desde el principio fixtures :allse importa. Esto le da a sus pruebas acceso a accesorios. Puede configurar una serie de otros conjuntos de pruebas y marcos desde test_helper.rb para incluir sus funciones y DSL como Capybara, FactoryBot y Faker.

tmp

Temporal: esta carpeta contiene cachés y sesiones que se pueden borrar en ocasiones, ya sea manualmente o durante la implementación (dependiendo de cómo esté implementando su aplicación).

vendedor

La carpeta del proveedor es un lugar para código de terceros similar a Gems. Gemas; sin embargo, son un poco más independientes, mientras que la carpeta del proveedor puede contener scripts específicos que no se incluyen como gemas. Para obtener más información sobre esto, así como algunos de los beneficios, consulte Cómo vender gemas una gema.

.browserslistrc

Browserslist es una herramienta para apuntar a versiones específicas del navegador para herramientas de NPM como Babel. Establecer en "valores predeterminados" de forma predeterminada, garantiza que

.gitignore

Como con cualquier otro proyecto, su control de versiones ignorará cualquier archivo o carpeta que especifique aquí.

.ruby-versión

Simplemente contiene la versión de Ruby en la que está trabajando el proyecto, RVM puede leer este archivo y configurar la versión correcta de ruby ​​en su computadora (si tiene varias versiones de Ruby instaladas).

babel.config.js

Babel es un compilador de JavaScript que le permite utilizar las últimas y mejores funciones de JavaScript y las compila para que sean compatibles con los navegadores web que aún no han adoptado esas funciones. Para obtener más información sobre la configuración de Babel, consulte sus documentos oficiales.

config.ru

Rack (el popular servidor Ruby) usa este archivo para iniciar la aplicación.

archivo de gemas

Dentro del archivo de gemas almacena todas las dependencias de su aplicación, ya que ha visto que el comando Rails New instala muchas gemas, pero a medida que agrega más funcionalidad a su aplicación, entrará y saldrá de este archivo mucho.

gemfile.lock

De manera similar a package-lock.json para proyectos de nodo, este archivo se actualiza cuando ejecuta bundle installo bundle updatey resuelve todas las dependencias de gemas más allá de lo que incluyó manualmente en el archivo de gemas. No te metas con este archivo, se actualiza automáticamente.

package.json

Establece dependencias NPM para módulos Javascript, estos se empaquetarán con Webpacker.

postscss.config.js

PostCSS le brinda muchas funcionalidades modernas con CSS, desde agregar automáticamente prefijos de proveedores hasta incluir módulos CSS. Para obtener más información sobre esta herramienta genial, compruébalo.

rakefile

Una vez más, Rake significa "Ruby Make". Rails tiene varios comandos integrados que requieren Rake, como rake routes(que le muestra todas las rutas para su aplicación) rake db:migratepara agregar nuevos modelos y columnas a su base de datos. Entre otros, puede agregar comandos de rake personalizados aquí.

README.md

Este es el archivo Léame de su proyecto, se mostrará en la página de Github de su proyecto, incluya cualquier información que crea que sería útil para otras personas que investigan o trabajan con su proyecto.

hilo.lock

Al igual que package.json, Yarn es el administrador de paquetes predeterminado de Webpacker. Este es un archivo de bloqueo, por lo que al igual que Gemfile.lock se actualizará automáticamente y no debe cambiarlo manualmente.

¡Lo lograste! ¡Felicidades!

vía GIPHY

Recursos adicionales

Ayudantes (La guía para principiantes sobre ayudantes de rieles - Mix & Go)

Información sobre Keep Files (StackOverflow keep files)

Inicialización de Rails (El proceso de inicialización de Rails - Guías de Ruby on Rails)

Creación de la aplicación de blog (Introducción a Rails - Guías de Ruby on Rails)

Me doy cuenta de que es bastante abrumador, pero déjeme simplificarlo un poco. El 99% de Rails está ahí para permitirle personalizar su proyecto al enésimo grado, por eso Rails sigue funcionando bien tanto para grandes empresas como para nuevas empresas; puede ajustar y modificar fácilmente casi cualquier parte de su aplicación con muy poco esfuerzo. Dicho esto, para la mayoría de los principiantes, los proyectos personales e incluso una cantidad decente de proyectos corporativos, utilizará muy poco de esta funcionalidad.

Dado que los modelos, las vistas y los controladores representan el núcleo de una aplicación Rails, pasará la mayor parte del tiempo de desarrollo en la carpeta de la aplicación. Utilizará el archivo routes.rb una cantidad considerable en la carpeta de configuración mientras configura cómo los usuarios recorrerán su aplicación y a medida que agrega nuevas acciones del controlador. Asegúrese de escribir siempre la cobertura de prueba adecuada para sus aplicaciones. Si es así, pasará mucho tiempo en la carpeta de prueba. El archivo de gemas es un último lugar que visitará con frecuencia para agregar y actualizar gemas según sea necesario.

Aunque hay un montón de archivos y carpetas creados en cada nuevo, rails newno debería sentirse abrumado por ellos; Si alguna vez te pierdes, esta publicación te respalda.