Hvad sker der, når du opretter et nyt Rails-projekt

Første gang du åbner din terminal og skriver rails newdet store antal filer og mapper, der oprettes, kan være overvældende. Du kan endda arbejde på adskillige Rails-projekter uden nogensinde at åbne mange af disse mapper - så hvad er de nøjagtigt? Hvad laver de bag kulisserne?

Sandheden er, at du ikke har brug for mange af dem, og Rails har flere flag indbygget i newkommandoen, som giver dig mulighed for at oprette et nyt projekt uden nogle af de indbyggede standardindstillinger for Rails (for at lære mere, skriv bare ud rails new —help) . Når det er sagt, for de fleste projekter kører du rails newog opretter en beastly projektmappe.

I dette indlæg skal jeg gennemgå hver eneste fil og mappe i et nyt Rails 6-projekt. Du er velkommen til at bruge dette som en reference, da du arbejder igennem dit nye Rails-projekt for at forstå nogle af de mere obskure mapper. Bogmærke dette indlæg, og vend tilbage til det når som helst du befinder dig i ukrudtet på et nyt Rails-projekt.

Så lad os starte:

rails new example-project

Wow, det er meget!

For det første opretter Rails alle de filer og mapper, der kræves af en ny Rails-app.

Så henter det ædelstene og bundter dem; dette er de afhængigheder, som Rails har brug for for at køre dit websted i sin enkleste iteration. Ser det ud som meget? I nogen grad er det, men disse perler tilføjer den funktionalitet, der gør et Rails-projekt så let at komme af jorden. I det væsentlige er alt, hvad du skal gøre nu, at køre, rails serverog du har en webapp, der kører lokalt: det er ret stærkt og ikke noget, du kan få så let / uden / alt det kedelplade.

Lad os komme ind i alle disse mapper:

 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 

Lad os hoppe ind:

cd example-project code . 

Vi går i rækkefølge, da Rails organiserer dem, for det meste vil jeg tale om hver enkelt mappe og fil, for gentagne filer (såsom .keep), jeg vil kun nævne det en gang. Du vil bemærke en masse konventioner Rails såsom ”application_ [ramme] s” ( application_controller.rb, application_helper.rb, application_job.rbosv). I sådanne tilfælde vil jeg dække mappen detaljeret, så du ved, hvad der kommer indeni, bare ved, at den eksisterende fil "applikation _ [...]. Rb" er en overordnet klasse, som andre klasser, du opretter i mappen, vil arve fra.

App-mappen

Er det sted, hvor størstedelen af ​​dit udviklingsarbejde finder sted / app indeholder de modeller, visninger og controllere, der vil blive serveret til brugere, når browseren anmoder om det.

app / aktiver

Gemmer aktiver til Rails Asset Pipeline. Asset Pipeline samler aktiverne (JavaScript, CSS og billeder) i et projekt og serverer dem til klienten på den mest effektive måde. Det gør det ved at sammenkæde og minificere aktiver. Det forud kompilerer aktiver skrevet i Sass og CoffeeScript.

Mere info: Asset Pipeline - Ruby on Rails Guides

app / aktiver / konfiguration

Se nedenunder

app / assets / config / manifest.js

Den førnævnte aktivrørledning administreres af en Ruby-perle kaldet "Sprockets-rails", som gør alt det ovenstående. "Kædehjul-skinner" har nogle tilknyttede hjælperperler som "sass-skinner", "uglifier" og "kaffe-skinner". Kaffe-skinner og Sass-skinner kompilerer din Sass og CoffeeScript til CSS og JavaScript, mens Uglifier minimerer disse aktiver. Manifest.js lader dig specifikt indstille, hvad der vil blive præ-kompileret.

For mere om denne specifikke fil se: eileen.codes | Rails 5: The Sprockets 4 Manifest

app / aktiver / billeder

Billedaktiver, såsom ikoner og SVG'er til aktivrørledningen, kan placeres her.

.holde

Dette er den første af mange .keep-filer, du vil se gennem et nyt Rails-projekt. Dette er ikke Rails-filer, men filer til Git, som normalt ikke sporer tomme mapper. Holdet. filen siger bare "nogen er herinde". Alt med en .keep-fil spores af Git. Du behøver ikke. Holde, hvis du lægger noget andet i mappen.

app / aktiver / typografiark

Mappen stilark er det sted, hvor du placerer typografier, der er knyttet til din app. Du kan skrive typografiark i CSS eller SASS ud af boksen. Asset Pipeline vil kompilere alle stilark til dig.

app / aktiver / typografiark / application.css

Indeholder alle stilarter, der vil blive inkluderet i aktivpipelinen. Globale stilarter kan skrives i Application.css, men du kan også skrive Controller-specifikke typografiark (når du kører kommandoen for rails g  at oprette en ny Controller, vil den oprette et tilknyttet typografiark.   =require_tree . Er Rails måde at inkludere alle tilknyttede mapper inde i en mappe, så enhver anden CSS filer inde i dette projekt vil blive inkluderet, når de kompileres, =require_selfvil omfatte enhver CSS, som du skriver inde i selve Application.css-filen, dette er stedsspecifikt, så CSS inde i Application.css køres / efter / de andre mapper, der trækkes ind afrequire_tree .

.app / kanaler

Rails har adskillige mindre interne rammer. ActionCable er en ramme, der giver dig mulighed for at bruge WebSockets til at oprette realtidsfunktioner i din app som chats og automatisk opdatering af "abonnementer" til meddelelser og nyt indhold. Hvis du ikke vil implementere nogen realtidsfunktioner, behøver du ikke bekymre dig om nogen ActionCable-mapper. Kanalmappen indeholder Ruby-filer på serversiden til oprettelse af disse forbindelser.

Du kan læse alt om ActionCable her: Actionkabeloversigt - Ruby on Rails Guides

app / kanaler / applikationskabel

Application_cable indeholder kanal- og forbindelsesfiler til oprettelse af nye realtidsfunktioner i din app.

app / kanaler / applikationskabel / kanal.rb

Hver enkelt realtidsfunktion i din app vil blive indkapslet i en individuel kanalkanal. For eksempel kan en chatfunktionschat være en kanal. Et notifikationssystem for nyligt offentliggjort indhold ville være en separat kanal. Denne mappe indeholder alle kanaler i din applikation.

app / kanaler / application_cable / connection.rb

Forbindelser er godkendelsen mellem brugeren og serveren. De beskæftiger sig ikke med nogen logik (det er hvad kanaler gør), snarere kontrollerer de bare for at sikre, at den aktuelle bruger er autoriseret til at abonnere på de forskellige kanaler i din applikation. I de fleste tilfælde vil dette være en simpel verifikation af, at brugeren er logget ind.

app / controllere

Del “C” i “MVC” mønsteret i Model View Controllers. Controllere som en mellemmand mellem modellen og udsigten. Baseret på brugerens anmodning griber controlleren alle tilknyttede data fra modellen og sender dem til den visning, som brugeren vises. For eksempel, hvis en bruger navigerer til localhost: 3000 / posts-siden, bestemmer controlleren, hvilken visning de vises, samt eventuelle tilknyttede poster fra modellen.

app / controllere / bekymringer

Bekymringer er en måde at krympe dine modeller på, snarere end at skrive en enorm mængde genanvendelige metoder i en enkelt model, du kan kaste disse metoder i bekymringer, hvor de let kan genbruges i dine controllere.

app / controllere / application_controller.rb

Controllere er bare rubinklasser, der arver fra en klasse kaldet ActionController. Når du tilføjer flere modeller til dit projekt, har du flere controllere at håndtere. application_controller.rb er påkrævet til ethvert Rails-projekt, fordi det arver fra ActionController::Baseog alle fremtidige controllers praktikanter arver fra det, hvilket giver dem funktionaliteten af ​​controllere.

Du vil se en masse “application_ [indsæt relativ titel her] .rb” filer: application_controller.rb, application_helper.rb, application_record.rb. I de fleste tilfælde repræsenterer disse en global måde at interagere med appen på, en formidler, der arver fra en basisklasse og derefter arves af fremtidige klasser eller begge dele. Jeg vil ikke diskutere funktionerne i disse filer i alle tilfælde.

app / hjælpere

Hjælpere er en måde at holde dine synspunkter ryddelige. Visninger skal blot være at vise oplysninger som html for brugeren. Hvis du finder ud af, at dine html.erb-filer går i stå med mange små beregninger eller logik, skal du flytte den kode til hjælpemetoder.

app / hjælpere / application_helper.rb

Giver et sted at skrive globale hjælpere, når du opretter flere controllere, får du flere hjælpere til at arbejde med specifikke controllere og synspunkter.

app / javascript

Denne mappe er et praktisk sted at placere alt det javascript, du bruger i din applikation. Rails Asset Pipeline inkluderer dem fra denne mappe til alle sider, hvor de gælder (Asset Pipeline ved, hvor scripts hører hjemme, fordi filerne normalt følger en navngivningskonvention for controlleren, de også anvender)

app / javascript / kanaler

Vi har allerede set på ActionCables kanaler ovenfor, men denne mappe indeholder klientsidespecifikt javascript til oprettelse af WebSocket-forbindelser i realtid.

app / javascript / kanaler / forbruger.js

Forbrugere er klienter til en WebSocket-forbindelse; slutbrugerne, der abonnerer på kanalen. Dette script forbinder disse forbrugere til kanalen på klientsiden.

app / javascript / kanaler / index.js

En applikation kan have flere kanaler (chat, alarmer, nye indlæg osv.). index.js er en klientside-mappe over alle kanaler i din applikation.

app / javascript / packs / application.js

Webpacker er en rubin perle, der giver dig mulighed for at bruge Webpack, JavaScript-bundleren i dit Rails-projekt. Det fungerer sammen med Asset Pipeline og er beregnet til store JavaScript-rammer, ikke små scripts eller andre aktiver som CSS eller billeder (som Webpack generelt ville håndtere i et Javascript-projekt). Webpacker er dog fleksibel, og dette er bare standard. Du kan få Webpack til at håndtere billeder og mindre JavaScripts, der omgår Asset Pipeline, hvis du vil. Du kan angive det i denne mappe ved at kræve forskellige aktiver. Standardaktiverne, der bliver pakket, er:

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

app / job

Job er baggrundsopgaver, du kører, mens brugerne fortsætter med at bruge din applikation Hver gang du har en operation, der vil involvere en masse behandling, nok til at bremse brugerens oplevelse markant og få din applikation til at "hænge", skal du oprette en baggrund job, der kører opgaven bag kulisserne, så brugeren kan fortsætte med at bruge dit websted uafbrudt.

For mere information om job, se: Rails Aktiv jobvejledning: Sådan bruges activejob | Kodeskab | via @codeship

app / aktiver / job / application_job.rb

Se ovenfor.

app / mailere

Du kan tænke på mailers som controllere til emails. Du kan oprette en ny mailer med Rails generate mailer. Dette giver dig det svarende til en model og en controller til at sende e-mails til dine brugere.

app / mailers / application_mailer.rb

Se ovenfor.

app / modeller

MVC's "M"; en model er en skabelon til de data, der er gemt i din database. Generelt betragtes enhver tabel som en "model". Almindelige modeller kan være   User,   Post  eller   Comment. Bemærk, at disse ting er ental snarere end flertal, dette er en henvisning til den prototypiske karakter af en model. Dette er i modsætning til controllere, hvorfor der ved konvention er flertal, fordi controllere henviser til flere poster.

app / modeller / bekymringer

Bekymringer er moduler - små nuggets af genanvendelig kode, der generelt udvindes fra modeller, når de bliver for fede. Bekymringsmappen er en del af en intern Rails-ramme kaldet ActiveSupport, hvilket gør modulerne lettere at administrere.

For mere info se Rails guider om bekymringer.

app / modeller / application_record.rb

Application_record.rb arver fra ActiveRecord::Basealle efterfølgende modeller i din app vil arve fra ApplicationRecord, svarende til hvordan Application_controller gør funktionaliteten af ​​den ActionControllertilgængelig for alle andre controllere.

app / visninger

Det sidste stykke af MVC-mønsteret er Views. Visningsmappen indeholder alt, hvad brugeren vil se i deres browser, for det meste i form af HTML med indlejret Ruby (ERB) eller .Haml, som er et skabelonsprog for Ruby. Nye controllere har sandsynligvis en tilknyttet visningsmappe med samme navn (medmindre du opretter en API). Generelt har hver metode i controlleren en tilknyttet visning.

app / visninger / layout

Din nye Rails-app har en Layout-mappe med application.html.erb , mailer.html.erb og mailer.text.erb disse indstiller globale layouts til Rails-appen i forskellige domæner såsom browseren og indbakken. Du vil muligvis tilføje andre komponenter i et layout i denne mappe, for eksempel en _header.html.erb, men de fleste af dine visninger vil blive organiseret i Vis mapper, der er specifikke for deres Controller. Application.html.erb er hovedskabelonen til din app, denne fil opretter den primære HTML og tags til din applikation med selve visningerne vist i . Udbytte er bare en smule Ruby-kode, der tilføjer den passende visning til den side, som brugeren ser på. At have enApplication.html.erb- filen holder din kode TØR, da du ikke gentagne gange behøver at erklære en doktype, hovedelementer eller inkludere scripts og typografiark for hver side i visningen. Rails og Asset Pipeline tager sig af dette for dig. De tre filer i denne mappe som anført ovenfor er:

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

bin-mappe

Bin-mappen hjælper med at opsætte Rails-applikationen, så den og tilknyttede kommandoer kan køre korrekt.

bin / bundt

Sikrer, at Gem Bundler fungerer korrekt.

skraldespand / skinner

Spring er en forudindlæser, der holder Rails kørende i baggrunden, mens du arbejder (der er nogle tilfælde, hvor du har brug for at genstarte serveren, men for det meste ændres ændringer i Views eller Controllers automatisk og straks ind i din app, der kører i en udvikling miljø). Denne fil indlæses forår, når du starter Rails-applikationen.

skraldespand / rive

Rake står for Ruby Make og bruges til at køre flere kommandoer, der både konfigurerer og opdaterer serveren.

bin / opsætning

Giver dig mulighed for at skrive kommandoer, der kører, når din app startes første gang.

skraldespand / fjeder

Tillader Spring at køre uden at bruge Bundler til at pakke alle dine perler, dette lader foråret hurtigt genindlæse dine sider under udvikling, når du foretager en ændring.

skraldespand / webpakke

Som diskuteret ovenfor bruger Rails Webpack til at samle nogle JavaScripts i modsætning til AssetPipeline, denne fil kræver den nødvendige opsætning og kører derefter Webpack.

bin / webpack-dev-server

Giver dig mulighed for at tilpasse dev-serveren til Webpack, som du måske ønsker at gøre, hvis du ikke vil have nogle eller alle dine aktiver samlet i dit udviklingsmiljø.

skraldespand / garn

Garn er en JavaScript-pakkehåndtering svarende til NPM. Du kan bruge enten med Rails-projekter.

config

Config, ligesom navnet antyder, indeholder filer til opsætning af din Rails-applikation i forskellige miljøer; udvikling og test.

config / miljøer

Denne mappe giver dig mulighed for at konfigurere, hvordan din applikation fungerer i udviklings-, produktions- og testmiljøer. For eksempel vil du muligvis sikre dig, at din action_mail er konfigureret til at sende e-mails via en mailservice i produktion, men ikke under udvikling.

konfiguration / initialisering

Denne mappe giver dig mulighed for at indstille granulære initialiseringer til at definere, hvordan din Rails-app skal præformere. Der er en god chance for, at du ikke bruger for meget tid herinde, især når du arbejder på dine første par Rails-applikationer.

config / initializers / application_controller_renderer.rb

Tillader controllere at gengive uden for deres anvendelsesområde. For mere information se: Opgradering til Ruby on Rails 5.0 fra Rails 4.2 - applikationsbrugssag - Kører med Ruby

config / initializers / assets.rb

Vedrører aktivpipeline; som du husker serverer sider i din Rails-app med de specifikke aktiver (CSS, JS osv.), de har brug for. Her kan du tilføje aktiver til indlæsningsstien, såsom node_modules.

config / initializers / backtrace_silencers.rb

Backtraces er et fejlfindingsværktøj, der giver dig mulighed for at se, hvad der foregår i din Rails-app, især nyttigt, når ting sprænger, og du kan lokalisere det specifikke fejlområde. Konfigurer, hvad backtraces viser ved at bestemme, hvilke biblioteker der skal vise backtraces i denne fil.

config / initializers / content_security_policy.rb

Fra Mozilla: “Svarhovedet på HTTP Content-Security-Policy giver webstedsadministratorer mulighed for at kontrollere ressourcer, som brugeragenten har tilladelse til at indlæse for en given side. Med nogle få undtagelser involverer politikker for det meste at specificere serveroprindelse og scriptendepunkter. “Content-Security-Policy - HTTP | MDN. I det væsentlige styrer dette de data, der får lov til at strømme ind i din app, og fra hvilke eksterne kilder. For eksempel at linke til eksterne scripts, skrifttyper eller billeder uden for din app.

config / initializers / cookies_serializer.rb

Bestemmer formatet for cookies, dette er som standard :json

config / initializers / filter_parameter_logging.rb

Vi diskuterer logning nedenfor, men der er nogle parametre (accepterede brugerindgange) som adgangskoder eller følsomme brugerdata, som du ikke vil have vist i din log, du kan tilføje dem her. filter_paramiter_logging er ligesom .gitignore for parametre.

config / initializers / inflections.rb

Som diskuteret i modelforklaringen har Rails navngivningskonventioner for hvad der er ental og flertal. Baseret på lokaliteter (sprogindstillinger til din app, se mappen Locales nedenfor), kan du opdatere disse bøjninger i denne initialisering, selvom det sandsynligvis ikke er en god idé, medmindre det er absolut nødvendigt.

config / initializers / mime_types.rb

MIME-typer - Multipurpose Internet Mail Extensions specificerer formatet på e-mail-vedhæftede filer.

MIME - Wikipedia

config / initializers / wrap_parameters.rb

Som standard indpakker Rails alle parametre i JSON, men du kan angive andre formater ved hjælp af wrap_parametershash. ActionController :: ParamsWrapper

config / locales

Vil normalt indlæses med en.yml som den eneste fil. Hvis din applikation vil have flere sprogindstillinger, kan du medtage alle oversættelserne som YML-filer her.

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

Kører boot.rb-filen, hvis du bruger Passenger. Det trækker alle ædelstene, du har krævet i gemfilen, ind i dit projekt og opretter en klasse, Applicationder arver fraRails::Application

config / boot.rb

Opretter en miljøvariabel, der er BUNDLE_GEMFILEindstillet til placeringen af ​​dit projekts perlefil, det er sådan, Rails ved, hvor de skal trække i afhængigheder eller perler, hvoraf der er ca. 2 dusin i en out-of-the-box Rails installation.

config / kabel.yml

Svarende til database.yml (se nedenfor) sætter kabel.yml udviklings-, test- og produktionsadaptere til ActionCable, som du vil huske er Rails måde at implementere realtidsfunktioner på i din applikation.

config / credentials.yml.enc

credentials.yml erstatter secrets.yml som placeringen af ​​hemmelige nøgler. Denne fil er krypteret, så ingen kan læse dine hemmelige nøgler og dekrypteres kun af masternøglen (se nedenfor).

config / database.yml

Du kan indstille en standarddatabase (for at gøre din kode lidt DRYer) samt specifikke DB'er til udvikling, test og produktion.

config / miljø.rb

Initialisering af Rails-applikationen på serveren kræver mange trin, afhængigt af om du bruger rails servereller Passenger, kan disse trin være lidt forskellige, men når miljøet. Rb indlæses, initialiseres applikationen og begynder at køre.

config / master.key

Kast dette i din .gitignore-fil med det samme (se nedenfor), dette er masternøglen, der dekrypterer legitimationsoplysninger.yml.enc i Rails, og ingen skal have det. For mere info kan du læse denne strålende artikel: Rails 5.2 legitimationsoplysninger - cedarkode - Medium

config / puma.rb

Puma er en webserver for Ruby og er standardwebserveren for Rails 'udviklingsmiljø. Du kan konfigurere Puma gennem denne mappe ved at ændre ting som trådantal og den standardport, som puma vil lytte efter indgående anmodninger på (standard er 3000).

config / routes.rb

Ruter er køreplanen omkring dine controllere. Ruter tager indgående anmodninger til serveren og dirigerer dem til den korrekte controller. I modsætning til de fleste andre filer i konfigurationsmappen bruger du meget tid her på at opsætte ruter, når du bygger din app.

config / spring.rb

Som diskuteret i bin-mappen Spring er en forudindlæser, denne fil fortæller faktisk Spring, hvilke filer og mapper der skal udløse en genstart.

config / storage.yml

ActiveStorage er en ramme, der er introduceret i Rails 5.2 til upload og lagring af aktiver såsom billeder. Du har brug for et sted at placere disse ting, såsom en AWS-instans, du angiver placeringen i denne fil.

config / webpacker.yml

Giver dig mulighed for at tilføje yderligere miljøer også Webpacker.

db

db / frø

Frø giver dig mulighed for at udfylde en database med data. Lad os sige, at du ønskede at se din paginering funktion du kunne oprette 11 indlæg i hånden, eller du kan bare bruge en perle som Faker til at oprette 11 tilfældige indlæg til dig og indsætte dem direkte i din database.

lib

Lib er defineret af Rails-guider som "Udvidede moduler til din applikation." Hvis dette lyder vagt, er du ikke den eneste, der har det sådan. Hvad der specifikt findes i lib-mappen er noget kontroversielt: se Hvad der foregår i Rails lib / - Ekstrem programmering - Medium og hvilken kode der findes i lib / biblioteket? men den generelle konsensus er, at lib skal reserveres til kode, der ikke passer ind i app-mappen, som let kan udvindes til brug i andre applikationer. Det har to undermapper aktiver og opgaver

lib / aktiver

Fra Ruby on Rails Guides:

"lib / assets er til dine egne bibliotekers kode, der ikke rigtig passer ind i applikationens omfang eller de biblioteker, der deles på tværs af applikationer."

lib / opgaver

Du kan skrive brugerdefinerede rakeopgaver og placere dem i denne mappe. Det er ikke et meget almindeligt anvendt sted.

log

Logning er en vigtig måde at se, hvordan din applikation klarer sig, og til at finde og fejlfinde problemer. Denne mappe er som standard tom. Du kan initialisere forskellige loggere i mappen config / miljøer med en kommando som: config.log_level = :infoderfra, når du kører din applikation, oprettes logfilen. For mere detaljeret information se denne fantastiske artikel fra Datadog: Sådan indsamles, tilpasser og administreres Rails-applikationslogfiler

Inkluderet i logmappen:

  • log / udvikling.log

node_modules

Alle nodepakker, du bruger i dit projekt (såsom Webpack og Babel), afhænger af snesevis, hvis ikke hundreder af andre nodepakker. En pakkehåndtering som NPM eller Garn administrerer disse pakker for dig. Du bør ikke gå ind i denne mappe eller redigere noget i den.

offentlig

Den offentlige mappe indeholder ressourcer, der er eksterne og kan fås uden for den normale struktur i din applikation, favicon, apple-touch-ikoner, robots.txt og selvfølgelig fejlsider. Sider som: 404, 422 og 500. Skulle applikationen i produktion opleve en eller anden form for fejl, serveres disse HTML-sider automatisk uden om ruter, controllere eller andre specifikke visninger. Disse sider er ikke en del af Rails Asset Pipeline, så du bliver nødt til at skrive alle stilarter inline.

offentlig / robots.txt

Giver dig mulighed for at specificere, hvordan søgemaskiner gennemsøger dit websted.

opbevaring

Rails 5.2 introducerede ActiveStorage, der erstattede ædelstene som PaperClip og giver Rails mulighed for direkte interface med cloud-tjenester som AWS eller Google

prøve

Rails har testet indbygget fra bunden! Standard testpakken i Rails er MiniTest, så du finder ud af, at alle disse mapper er klar til brug med MiniTest.

Der er mapper, hvor du kan teste specifikke controllere, hjælpere, modeller, mailers samt skrive integrationstest, der fungerer på tværs af flere controllere og genskabe noget, der ligner den faktiske brugeroplevelse. For mere om, hvad en udgør en controller test vs en integration test, anbefaler jeg denne artikel fra (Jason Swett)

test / kanaler

test / kanaler / application_cable / connection_test.rb

Test til ActionCable-forbindelser som alle ActionCable-ting, du har kun brug for dette, hvis du bruger kanaler i din applikation.

test / controllere

Du kan teste dine controllere her, disse tests ser generelt på, hvor godt din controller går mellem modellen og udsigten, de er større i omfang end modelltests, men mindre i omfang end integrationstests.

test / inventar

Ikke et sted at skrive test, men generere dummy testdata. Inde i fixtures-mappen kan du tilføje et vilkårligt antal YML-filer med foruddefinerede data. Du kan trække disse data ind i dine tests for at sikre dig, at dine modeller fungerer korrekt og interagerer med applikationen som forventet.

test / inventar / filer

Nu hvor Rails har filhåndtering indbygget med ActiveStorage, kan du ikke kun teste data fra modeller, du kan også teste filer.

test / hjælpere

Du kan skrive specifikke tests til de hjælpere, du har i appen / hjælpere. Test af hjælpere er ikke alt for almindelig, men du kan gøre det, hvis en hjælper er alt for kompleks eller synes skør.

test / integration

Integrationstest giver dig mulighed for at teste interaktioner mellem controllere og give en testmulighed tættere på den faktiske brugeroplevelse.

test / mailers

Du kan endda skrive test til dine mailere for at sikre, at e-mails sendes korrekt og formateres korrekt.

test / modeller

En af de mest granulære tests; du kan sikre, at en post gemmes korrekt, databasen er opdateret osv.

test / system

Systemtest er en måde at teste din applikation på i en rigtig browser, der genererer skærmbilleder for at vise dig, hvordan alt ser ud i aktion. Systemtest vil også teste JavaScript, ikke at du skal bruge MiniTest-systemtest som erstatning for et godt JavaScript-testbibliotek som Jest. Systemtest; vil dog give dig mulighed for at se, hvordan din JavaScript fungerer i browseren.

test / application_system_test_case.rb

Denne fil indeholder standardindstillingerne for dine systemtest, du kan ændre browsere, drivere eller skærmopløsning.

test / test_helper.rb

Test hjælper hjælper med eksterne data og biblioteker, der er nødvendige for test. Du vil bemærke, at lige fra flagermusen fixtures :allimporteres. Dette giver dine tests adgang til inventar. Du kan oprette en række andre testpakker og rammer fra test_helper.rb til at inkludere deres funktioner og DSL'er som Capybara, FactoryBot og Faker.

tmp

Midlertidig - denne mappe indeholder caches og sessioner, den kan blive ryddet lejlighedsvis enten manuelt eller ved implementering (afhængigt af hvordan du implementerer din app).

sælger

Sælgermappen er et sted for tredjepartskode, ligesom Gems. Ædelstene; er dog lidt mere selvstændige, mens leverandørmappen kan indeholde specifikke scripts, der ikke er samlet som perler. For mere om dette såvel som nogle af fordelene, se Sådan sælger du perle.

.browserslistrc

Browserslist er et værktøj til at målrette mod specifikke browserversioner til NPM-værktøjer som Babel. Indstillet til "standardindstillinger" som standard, sikrer det

.gitignore

Som med ethvert andet projekt ignorerer din versionskontrol alle filer eller mapper, du angiver her.

.ruby-version

Indeholder simpelthen den version af Ruby, som projektet arbejder under, RVM kan læse denne fil og indstille den korrekte version af rubin på din computer (hvis du har flere versioner af Ruby installeret).

babel.config.js

Babel er en JavaScript-kompilator, der lader dig bruge de nyeste og bedste funktioner i JavaScript og kompilerer dem til at være kompatible med webbrowsere, der muligvis endnu ikke har vedtaget disse funktioner. For mere information om Babel-konfiguration, se deres officielle dokumenter.

config.ru

Rack (den populære Ruby-server) bruger denne fil til at starte applikationen.

gemfile

Inde i gemfilen gemmer du alle dine applikations afhængigheder, da du har set kommandoen Rails New installerer mange ædelstene, men når du tilføjer mere funktionalitet til din applikation, hopper du meget ind og ud af denne fil.

gemfile.lock

I lighed med package-lock.json for Node-projekter opdateres denne fil, når du kører bundle installeller bundle updateog løser alle perleafhængigheder ud over det, du manuelt inkluderede i gem-filen. Gør ikke rod med denne fil, den opdateres automatisk.

pakke.json

Opretter NPM-afhængigheder for Javascript-moduler, disse vil blive pakket med Webpacker.

postscss.config.js

PostCSS giver dig en masse moderne funktionalitet med CSS, fra automatisk tilføjelse af leverandørpræfikser til inklusive CSS-moduler. For mere om dette seje værktøj, tjek det ud.

rakefile

Igen står Rake for "Ruby Make". Rails har flere indbyggede kommandoer, der kræver Rake, såsom rake routes(viser dig alle ruter til din applikation) for rake db:migrateat tilføje nye modeller og kolonner til din db. Blandt andet kan du tilføje brugerdefinerede rake-kommandoer her.

README.md

Dette er Vigtigt for dit projekt, det vil blive vist på dine projekter Github-side, inkluderer alle oplysninger, som du mener vil være nyttige for andre, der undersøger eller arbejder med dit projekt.

garn. lås

Ligesom package.json er Yarn Webpacker-standardpakkehåndtering. Dette er en låsefil, så som Gemfile.lock opdateres den automatisk, og du bør ikke ændre den manuelt.

Du klarede det! Tillykke!

via GIPHY

Yderligere ressourcer

Hjælpere (Begyndervejledningen til skinnehjælpere - Mix & Go)

Info om Keep Files (StackOverflow beholder filer)

Rails initialisering (Rails initialiseringsprocessen - Ruby on Rails Guides)

Oprettelse af blogapplikationen (Kom godt i gang med skinner - Ruby on Rails Guides)

Jeg er klar over, at det er ret overvældende, men lad mig forenkle det lidt. 99% af Rails er der for at lade dig tilpasse dit projekt til den niende grad, det er derfor, Rails fortsætter med at fungere godt for både store virksomheder og startups; du kan nemt justere og tilpasse næsten enhver del af din applikation med meget lidt indsats. Når det er sagt, for de fleste begyndere, personlige projekter og endda en anstændig mængde virksomhedsprojekter bruger du meget lidt af denne funktionalitet.

Da modeller, visninger og controllere repræsenterer kernen i en Rails-applikation, bruger du det meste af din udviklingstid i appmappen. Du bruger routes.rb-filen en hel del i konfigurationsmappen, mens du konfigurerer, hvordan brugerne vil gå gennem din app, og når du tilføjer nye controller-handlinger. Sørg for altid at skrive korrekt testdækning til dine applikationer. Hvis du er, bruger du meget tid i testmappen. Gemfilen er et sidste sted, du vil besøge, ofte tilføje og opdatere perler efter behov.

Selvom der er masser af filer og mapper oprettet i hvert nyt rails new, bør du ikke blive overvældet af det; hvis du nogensinde går vild, har dette indlæg din ryg.