-
Notifications
You must be signed in to change notification settings - Fork 0
/
configuring.html
3586 lines (3500 loc) · 374 KB
/
configuring.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!doctype html>
<html dir="ltr" lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Configuración de Aplicaciones Rails — Ruby on Rails Guides</title>
<link rel="stylesheet" type="text/css" href="stylesheets/style-v2.css" data-turbo-track="reload">
<link rel="stylesheet" type="text/css" href="stylesheets/print-v2.css" media="print">
<link rel="stylesheet" type="text/css" href="stylesheets/highlight-v2.css" data-turbo-track="reload">
<link rel="icon" href="images/favicon.ico" sizes="any">
<link rel="apple-touch-icon" href="images/icon.png">
<script src="javascripts/@hotwired--turbo.js" data-turbo-track="reload"></script>
<script src="javascripts/clipboard.js" data-turbo-track="reload"></script>
<script src="javascripts/guides.js" data-turbo-track="reload"></script>
<meta property="og:title" content="Configuración de Aplicaciones Rails — Ruby on Rails Guides" />
<meta name="description" content="NO LEA ESTE ARCHIVO EN GITHUB, LAS GUÍAS ESTÁN PUBLICADAS EN https://guides.rubyonrails.org.Configuración de Aplicaciones RailsEsta guía cubre las características de configuración e inicialización disponibles para las aplicaciones Rails.Después de leer esta guía, sabrá: Cómo ajustar el comportamiento de sus aplicaciones Rails. Cómo agregar código adicional para que se ejecute al iniciar la aplicación." />
<meta property="og:description" content="NO LEA ESTE ARCHIVO EN GITHUB, LAS GUÍAS ESTÁN PUBLICADAS EN https://guides.rubyonrails.org.Configuración de Aplicaciones RailsEsta guía cubre las características de configuración e inicialización disponibles para las aplicaciones Rails.Después de leer esta guía, sabrá: Cómo ajustar el comportamiento de sus aplicaciones Rails. Cómo agregar código adicional para que se ejecute al iniciar la aplicación." />
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="Ruby on Rails Guides" />
<meta property="og:image" content="https://avatars.githubusercontent.com/u/4223" />
<meta property="og:type" content="website" />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic:[email protected]&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Heebo:[email protected]&family=Noto+Sans+Arabic:[email protected]&display=swap" rel="stylesheet">
<meta name="theme-color" content="#C81418">
</head>
<body class="guide">
<nav id="topNav" aria-label="Secondary">
<div class="wrapper">
<strong class="more-info-label">Más en <a href="https://rubyonrails.org/">rubyonrails.org:</a> </strong>
<span class="red-button more-info-button">
Más Ruby on Rails
</span>
<ul class="more-info-links s-hidden">
<li class="more-info"><a href="https://rubyonrails.org/blog">Blog</a></li>
<li class="more-info"><a href="https://guides.rubyonrails.org/">Guías</a></li>
<li class="more-info"><a href="https://api.rubyonrails.org/">API</a></li>
<li class="more-info"><a href="https://discuss.rubyonrails.org/">Foro</a></li>
<li class="more-info"><a href="https://github.com/rails/rails">Contribuir en GitHub</a></li>
</ul>
</div>
</nav>
<header id="page_header">
<div class="wrapper clearfix">
<nav id="feature_nav">
<div class="header-logo">
<a href="index.html" title="Regresar a la página principal de Guías para Edge">Guías</a>
<span id="version_switcher">
Versión:
<select class="guides-version">
<option value="https://edgeguides.rubyonrails.org/" selected>Edge</option>
<option value="https://guides.rubyonrails.org/v7.2/">7.2</option>
<option value="https://guides.rubyonrails.org/v7.1/">7.1</option>
<option value="https://guides.rubyonrails.org/v7.0/">7.0</option>
<option value="https://guides.rubyonrails.org/v6.1/">6.1</option>
<option value="https://guides.rubyonrails.org/v6.0/">6.0</option>
<option value="https://guides.rubyonrails.org/v5.2/">5.2</option>
<option value="https://guides.rubyonrails.org/v5.1/">5.1</option>
<option value="https://guides.rubyonrails.org/v5.0/">5.0</option>
<option value="https://guides.rubyonrails.org/v4.2/">4.2</option>
<option value="https://guides.rubyonrails.org/v4.1/">4.1</option>
<option value="https://guides.rubyonrails.org/v4.0/">4.0</option>
<option value="https://guides.rubyonrails.org/v3.2/">3.2</option>
<option value="https://guides.rubyonrails.org/v3.1/">3.1</option>
<option value="https://guides.rubyonrails.org/v3.0/">3.0</option>
<option value="https://guides.rubyonrails.org/v2.3/">2.3</option>
</select>
</span>
</div>
<ul class="nav">
<li><a class="nav-item" id="home_nav" href="https://rubyonrails.org/">Inicio</a></li>
<li class="guides-index guides-index-large">
<a href="index.html" id="guidesMenu" class="guides-index-item nav-item">Índice de Guías</a>
<div id="guides" class="clearfix" style="display: none;">
<hr />
<dl class="guides-section-container">
<div class="guides-section">
<dt>Comienza Aquí</dt>
<dd><a href="getting_started.html">Primeros Pasos con Rails</a></dd>
</div>
<div class="guides-section">
<dt>Modelos</dt>
<dd><a href="active_record_basics.html">Conceptos Básicos de Active Record</a></dd>
<dd><a href="active_record_migrations.html">Migraciones de Active Record</a></dd>
<dd><a href="active_record_validations.html">Validaciones de Active Record</a></dd>
</div>
<div class="guides-section">
<dt>Vistas</dt>
<dd><a href="action_view_overview.html">Resumen de Action View</a></dd>
<dd><a href="layouts_and_rendering.html">Diseños y Renderizado en Rails</a></dd>
</div>
<div class="guides-section">
<dt>Controladores</dt>
<dd><a href="action_controller_overview.html">Resumen de Action Controller</a></dd>
<dd><a href="routing.html">Enrutamiento en Rails desde el Exterior</a></dd>
</div>
<div class="guides-section">
<dt>Otros Componentes</dt>
<dd><a href="active_support_core_extensions.html">Extensiones Básicas de Active Support</a></dd>
<dd><a href="action_mailer_basics.html">Conceptos Básicos de Action Mailer</a></dd>
<dd><a href="action_mailbox_basics.html">Conceptos Básicos de Action Mailbox</a></dd>
<dd><a href="action_text_overview.html">Resumen de Action Text</a></dd>
<dd><a href="active_job_basics.html">Conceptos Básicos de Active Job</a></dd>
</div>
<div class="guides-section">
<dt>Políticas</dt>
<dd><a href="maintenance_policy.html">Política de Mantenimiento</a></dd>
</div>
<div class="guides-section">
<dt>Notas de Lanzamiento</dt>
<dd><a href="upgrading_ruby_on_rails.html">Actualizando Ruby on Rails</a></dd>
<dd><a href="7_2_release_notes.html">Versión 7.2 - ?</a></dd>
<dd><a href="7_1_release_notes.html">Versión 7.1 - Octubre 2023</a></dd>
<dd><a href="7_0_release_notes.html">Versión 7.0 - Diciembre 2021</a></dd>
<dd><a href="6_1_release_notes.html">Versión 6.1 - Diciembre 2020</a></dd>
</div>
</dl>
</div>
</li>
<li><a class="nav-item" href="contributing_to_ruby_on_rails.html">Contribuir</a></li>
<li class="guides-index guides-index-small">
<select class="guides-index-item nav-item">
<option value="index.html">Índice de Guías</option>
<optgroup label="Comienza Aquí">
<option value="getting_started.html">Primeros Pasos con Rails</option>
</optgroup>
<optgroup label="Modelos">
<option value="active_record_basics.html">Conceptos Básicos de Active Record</option>
<option value="active_record_migrations.html">Migraciones de Active Record</option>
<option value="active_record_validations.html">Validaciones de Active Record</option>
</optgroup>
<optgroup label="Vistas">
<option value="action_view_overview.html">Resumen de Action View</option>
<option value="layouts_and_rendering.html">Diseños y Renderizado en Rails</option>
</optgroup>
<optgroup label="Controladores">
<option value="action_controller_overview.html">Resumen de Action Controller</option>
<option value="routing.html">Enrutamiento en Rails desde el Exterior</option>
</optgroup>
<optgroup label="Otros Componentes">
<option value="active_support_core_extensions.html">Extensiones Básicas de Active Support</option>
<option value="action_mailer_basics.html">Conceptos Básicos de Action Mailer</option>
<option value="action_mailbox_basics.html">Conceptos Básicos de Action Mailbox</option>
<option value="action_text_overview.html">Resumen de Action Text</option>
<option value="active_job_basics.html">Conceptos Básicos de Active Job</option>
</optgroup>
<optgroup label="Políticas">
<option value="maintenance_policy.html">Política de Mantenimiento</option>
</optgroup>
<optgroup label="Notas de Lanzamiento">
<option value="upgrading_ruby_on_rails.html">Actualizando Ruby on Rails</option>
<option value="7_2_release_notes.html">Versión 7.2 - ?</option>
<option value="7_1_release_notes.html">Versión 7.1 - Octubre 2023</option>
<option value="7_0_release_notes.html">Versión 7.0 - Diciembre 2021</option>
<option value="6_1_release_notes.html">Versión 6.1 - Diciembre 2020</option>
</optgroup>
</select>
</li>
</ul>
</nav>
</div>
</header>
<hr class="hide" />
<section id="feature">
<div class="wrapper">
<p><strong>NO LEA ESTE ARCHIVO EN GITHUB, LAS GUÍAS ESTÁN PUBLICADAS EN <a href="https://guides.rubyonrails.org">https://guides.rubyonrails.org</a>.</strong></p><h1>Configuración de Aplicaciones Rails</h1><p>Esta guía cubre las características de configuración e inicialización disponibles para las aplicaciones Rails.</p><p>Después de leer esta guía, sabrá:</p>
<ul>
<li>Cómo ajustar el comportamiento de sus aplicaciones Rails.</li>
<li>Cómo agregar código adicional para que se ejecute al iniciar la aplicación.</li>
</ul>
<nav id="subCol">
<h3 class="chapter">
<picture>
<!-- Using the `source` HTML tag to set the dark theme image -->
<source
srcset="images/icon_book-close-bookmark-1-wht.svg"
media="(prefers-color-scheme: dark)"
/>
<img src="images/icon_book-close-bookmark-1.svg" alt="Chapter Icon" />
</picture>
Chapters
</h3>
<ol class="chapters">
<li><a href="#ubicaciones-para-el-código-de-inicialización">Ubicaciones para el Código de Inicialización</a></li>
<li><a href="#ejecutando-código-antes-de-rails">Ejecutando Código Antes de Rails</a></li>
<li><a href="#configuración-de-componentes-de-rails">Configuración de Componentes de Rails</a>
<ul>
<li><a href="#valores-por-defecto-versionados">Valores por Defecto Versionados</a></li>
<li><a href="#configuración-general-de-rails">Configuración General de Rails</a></li>
<li><a href="#configuración-de-activos">Configuración de Activos</a></li>
<li><a href="#configuración-de-generadores">Configuración de Generadores</a></li>
<li><a href="#configuración-de-middleware">Configuración de Middleware</a></li>
<li><a href="#configuración-de-i18n">Configuración de i18n</a></li>
<li><a href="#configuración-de-active-model">Configuración de Active Model</a></li>
<li><a href="#configuración-de-active-record">Configuración de Active Record</a></li>
<li><a href="#configuración-de-action-controller">Configuración de Action Controller</a></li>
<li><a href="#configuración-de-action-dispatch">Configuración de Action Dispatch</a></li>
<li><a href="#configuración-de-action-view">Configuración de Action View</a></li>
<li><a href="#configuración-de-action-mailbox">Configuración de Action Mailbox</a></li>
<li><a href="#configuración-de-action-mailer">Configuración de Action Mailer</a></li>
<li><a href="#configuración-de-active-support">Configuración de Active Support</a></li>
<li><a href="#configuración-de-active-job">Configuración de Active Job</a></li>
<li><a href="#configuración-de-action-cable">Configuración de Action Cable</a></li>
<li><a href="#configuración-de-active-storage">Configuración de Active Storage</a></li>
<li><a href="#configuración-de-action-text">Configuración de Action Text</a></li>
<li><a href="#configuración-de-una-base-de-datos">Configuración de una Base de Datos</a></li>
<li><a href="#preferencia-de-conexión">Preferencia de Conexión</a></li>
<li><a href="#creación-de-entornos-rails">Creación de Entornos Rails</a></li>
<li><a href="#despliegue-en-un-subdirectorio-raíz-de-url-relativa">Despliegue en un Subdirectorio (raíz de URL relativa)</a></li>
</ul></li>
<li><a href="#configuraciones-del-entorno-rails">Configuraciones del Entorno Rails</a></li>
<li><a href="#uso-de-archivos-de-inicialización">Uso de Archivos de Inicialización</a></li>
<li><a href="#ganchos-de-carga">Ganchos de Carga</a>
<ul>
<li><a href="#evitar-cargar-frameworks-de-rails">Evitar Cargar Frameworks de Rails</a></li>
<li><a href="#¿cuándo-se-llaman-los-ganchos-questionmark">¿Cuándo se llaman los Ganchos?</a></li>
<li><a href="#modificar-código-para-usar-ganchos-de-carga">Modificar Código para Usar Ganchos de Carga</a></li>
<li><a href="#ganchos-de-carga-disponibles">Ganchos de Carga Disponibles</a></li>
</ul></li>
<li><a href="#eventos-de-inicialización">Eventos de Inicialización</a>
<ul>
<li><a href="#rails-railtie-initializer"><code>Rails::Railtie#initializer</code></a></li>
<li><a href="#inicializadores">Inicializadores</a></li>
</ul></li>
<li><a href="#agrupación-de-bases-de-datos">Agrupación de Bases de Datos</a></li>
<li><a href="#configuración-personalizada">Configuración Personalizada</a></li>
<li><a href="#motores-de-búsqueda-indexación">Motores de Búsqueda Indexación</a></li>
<li><a href="#monitor-de-sistema-de-archivos-con-eventos">Monitor de Sistema de Archivos con Eventos</a></li>
</ol>
</nav>
<hr>
</div>
</section>
<main id="container">
<div class="wrapper">
<div id="mainCol">
<h2 id="ubicaciones-para-el-código-de-inicialización"><a class="anchorlink" href="#ubicaciones-para-el-código-de-inicialización"><span>1</span> Ubicaciones para el Código de Inicialización</a></h2><p>Rails ofrece cuatro lugares estándar para ubicar el código de inicialización:</p>
<ul>
<li><code>config/application.rb</code></li>
<li>Archivos de configuración específicos del entorno</li>
<li>Inicializadores</li>
<li>Después de los inicializadores</li>
</ul>
<h2 id="ejecutando-código-antes-de-rails"><a class="anchorlink" href="#ejecutando-código-antes-de-rails"><span>2</span> Ejecutando Código Antes de Rails</a></h2><p>En el raro caso de que su aplicación necesite ejecutar algún código antes de que Rails se cargue, colóquelo encima de la llamada a <code>require "rails/all"</code> en <code>config/application.rb</code>.</p><h2 id="configuración-de-componentes-de-rails"><a class="anchorlink" href="#configuración-de-componentes-de-rails"><span>3</span> Configuración de Componentes de Rails</a></h2><p>En general, el trabajo de configurar Rails significa configurar los componentes de Rails, así como configurar Rails en sí mismo. El archivo de configuración <code>config/application.rb</code> y los archivos de configuración específicos del entorno (como <code>config/environments/production.rb</code>) le permiten especificar las diversas configuraciones que desea pasar a todos los componentes.</p><p>Por ejemplo, podría agregar esta configuración al archivo <code>config/application.rb</code>:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">time_zone</span> <span class="o">=</span> <span class="s1">'Central Time (US & Canada)'</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.time_zone = 'Central Time (US & Canada)'
">Copy</button>
</div>
<p>Esta es una configuración para Rails en sí. Si desea pasar configuraciones a componentes individuales de Rails, puede hacerlo a través del mismo objeto <code>config</code> en <code>config/application.rb</code>:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">active_record</span><span class="p">.</span><span class="nf">schema_format</span> <span class="o">=</span> <span class="ss">:ruby</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.active_record.schema_format = :ruby
">Copy</button>
</div>
<p>Rails usará esa configuración particular para configurar Active Record.</p><p>ADVERTENCIA: Use los métodos de configuración pública en lugar de llamar directamente a la clase asociada. Por ejemplo, <code>Rails.application.config.action_mailer.options</code> en lugar de <code>ActionMailer::Base.options</code>.</p><p>NOTA: Si necesita aplicar configuración directamente a una clase, use un <a href="https://edgeapi.rubyonrails.org/classes/ActiveSupport/LazyLoadHooks.html">hook de carga diferida</a> en un inicializador para evitar la carga automática de la clase antes de que se complete la inicialización. Esto fallará porque la carga automática durante la inicialización no puede repetirse de manera segura cuando la aplicación se recarga.</p><h3 id="valores-por-defecto-versionados"><a class="anchorlink" href="#valores-por-defecto-versionados"><span>3.1</span> Valores por Defecto Versionados</a></h3><p><a href="https://edgeapi.rubyonrails.org/classes/Rails/Application/Configuration.html#method-i-load_defaults"><code>config.load_defaults</code></a> carga valores de configuración predeterminados para una versión objetivo y todas las versiones anteriores. Por ejemplo, <code>config.load_defaults 6.1</code> cargará los valores predeterminados para todas las versiones hasta e incluyendo la versión 6.1.</p><p>A continuación se muestran los valores predeterminados asociados con cada versión objetivo. En casos de valores conflictivos, las versiones más nuevas tienen prioridad sobre las más antiguas.</p><h4 id="valores-por-defecto-para-la-versión-objetivo-7-2"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-7-2"><span>3.1.1</span> Valores por Defecto para la Versión Objetivo 7.2</a></h4>
<ul>
<li><a href="#config-active-job-enqueue-after-transaction-commit"><code>config.active_job.enqueue_after_transaction_commit</code></a>: <code>:default</code></li>
<li><a href="#config-active-record-postgresql-adapter-decode-dates"><code>config.active_record.postgresql_adapter_decode_dates</code></a>: <code>true</code></li>
<li><a href="#config-active-record-validate-migration-timestamps"><code>config.active_record.validate_migration_timestamps</code></a>: <code>true</code></li>
<li><a href="#config-active-storage-web-image-content-types"><code>config.active_storage.web_image_content_types</code></a>: <code>%w[image/png image/jpeg image/gif image/webp]</code></li>
<li><a href="#config-yjit"><code>config.yjit</code></a>: <code>true</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-7-1"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-7-1"><span>3.1.2</span> Valores por Defecto para la Versión Objetivo 7.1</a></h4>
<ul>
<li><a href="#config-action-dispatch-debug-exception-log-level"><code>config.action_dispatch.debug_exception_log_level</code></a>: <code>:error</code></li>
<li><a href="#config-action-dispatch-default-headers"><code>config.action_dispatch.default_headers</code></a>: <code>{ "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }</code></li>
<li><a href="#config-action-text-sanitizer-vendor"><code>config.action_text.sanitizer_vendor</code></a>: <code>Rails::HTML::Sanitizer.best_supported_vendor</code></li>
<li><a href="#config-action-view-sanitizer-vendor"><code>config.action_view.sanitizer_vendor</code></a>: <code>Rails::HTML::Sanitizer.best_supported_vendor</code></li>
<li><a href="#config-active-record-before-committed-on-all-records"><code>config.active_record.before_committed_on_all_records</code></a>: <code>true</code></li>
<li><a href="#config-active-record-belongs-to-required-validates-foreign-key"><code>config.active_record.belongs_to_required_validates_foreign_key</code></a>: <code>false</code></li>
<li><a href="#config-active-record-default-column-serializer"><code>config.active_record.default_column_serializer</code></a>: <code>nil</code></li>
<li><a href="#config-active-record-encryption-hash-digest-class"><code>config.active_record.encryption.hash_digest_class</code></a>: <code>OpenSSL::Digest::SHA256</code></li>
<li><a href="#config-active-record-encryption-support-sha1-for-non-deterministic-encryption"><code>config.active_record.encryption.support_sha1_for_non_deterministic_encryption</code></a>: <code>false</code></li>
<li><a href="#config-active-record-generate-secure-token-on"><code>config.active_record.generate_secure_token_on</code></a>: <code>:initialize</code></li>
<li><a href="#config-active-record-marshalling-format-version"><code>config.active_record.marshalling_format_version</code></a>: <code>7.1</code></li>
<li><a href="#config-active-record-query-log-tags-format"><code>config.active_record.query_log_tags_format</code></a>: <code>:sqlcommenter</code></li>
<li><a href="#config-active-record-raise-on-assign-to-attr-readonly"><code>config.active_record.raise_on_assign_to_attr_readonly</code></a>: <code>true</code></li>
<li><a href="#config-active-record-run-after-transaction-callbacks-in-order-defined"><code>config.active_record.run_after_transaction_callbacks_in_order_defined</code></a>: <code>true</code></li>
<li><a href="#config-active-record-run-commit-callbacks-on-first-saved-instances-in-transaction"><code>config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction</code></a>: <code>false</code></li>
<li><a href="#config-active-record-sqlite3-adapter-strict-strings-by-default"><code>config.active_record.sqlite3_adapter_strict_strings_by_default</code></a>: <code>true</code></li>
<li><a href="#config-active-support-cache-format-version"><code>config.active_support.cache_format_version</code></a>: <code>7.1</code></li>
<li><a href="#config-active-support-message-serializer"><code>config.active_support.message_serializer</code></a>: <code>:json_allow_marshal</code></li>
<li><a href="#config-active-support-raise-on-invalid-cache-expiration-time"><code>config.active_support.raise_on_invalid_cache_expiration_time</code></a>: <code>true</code></li>
<li><a href="#config-active-support-use-message-serializer-for-metadata"><code>config.active_support.use_message_serializer_for_metadata</code></a>: <code>true</code></li>
<li><a href="#config-add-autoload-paths-to-load-path"><code>config.add_autoload_paths_to_load_path</code></a>: <code>false</code></li>
<li><a href="#config-dom-testing-default-html-version"><code>config.dom_testing_default_html_version</code></a>: <code>defined?(Nokogiri::HTML5) ? :html5 : :html4</code></li>
<li><a href="#config-log-file-size"><code>config.log_file_size</code></a>: <code>100 * 1024 * 1024</code></li>
<li><a href="#config-precompile-filter-parameters"><code>config.precompile_filter_parameters</code></a>: <code>true</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-7-0"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-7-0"><span>3.1.3</span> Valores por Defecto para la Versión Objetivo 7.0</a></h4>
<ul>
<li><a href="#config-action-controller-raise-on-open-redirects"><code>config.action_controller.raise_on_open_redirects</code></a>: <code>true</code></li>
<li><a href="#config-action-controller-wrap-parameters-by-default"><code>config.action_controller.wrap_parameters_by_default</code></a>: <code>true</code></li>
<li><a href="#config-action-dispatch-cookies-serializer"><code>config.action_dispatch.cookies_serializer</code></a>: <code>:json</code></li>
<li><a href="#config-action-dispatch-default-headers"><code>config.action_dispatch.default_headers</code></a>: <code>{ "X-Frame-Options" => "SAMEORIGIN", "X-XSS-Protection" => "0", "X-Content-Type-Options" => "nosniff", "X-Download-Options" => "noopen", "X-Permitted-Cross-Domain-Policies" => "none", "Referrer-Policy" => "strict-origin-when-cross-origin" }</code></li>
<li><a href="#config-action-mailer-smtp-timeout"><code>config.action_mailer.smtp_timeout</code></a>: <code>5</code></li>
<li><a href="#config-action-view-apply-stylesheet-media-default"><code>config.action_view.apply_stylesheet_media_default</code></a>: <code>false</code></li>
<li><a href="#config-action-view-button-to-generates-button-tag"><code>config.action_view.button_to_generates_button_tag</code></a>: <code>true</code></li>
<li><a href="#config-active-record-automatic-scope-inversing"><code>config.active_record.automatic_scope_inversing</code></a>: <code>true</code></li>
<li><a href="#config-active-record-partial-inserts"><code>config.active_record.partial_inserts</code></a>: <code>false</code></li>
<li><a href="#config-active-record-verify-foreign-keys-for-fixtures"><code>config.active_record.verify_foreign_keys_for_fixtures</code></a>: <code>true</code></li>
<li><a href="#config-active-storage-multiple-file-field-include-hidden"><code>config.active_storage.multiple_file_field_include_hidden</code></a>: <code>true</code></li>
<li><a href="#config-active-storage-variant-processor"><code>config.active_storage.variant_processor</code></a>: <code>:vips</code></li>
<li><a href="#config-active-storage-video-preview-arguments"><code>config.active_storage.video_preview_arguments</code></a>: <code>"-vf 'select=eq(n\\,0)+eq(key\\,1)+gt(scene\\,0.015),loop=loop=-1:size=2,trim=start_frame=1' -frames:v 1 -f image2"</code></li>
<li><a href="#config-active-support-cache-format-version"><code>config.active_support.cache_format_version</code></a>: <code>7.0</code></li>
<li><a href="#config-active-support-executor-around-test-case"><code>config.active_support.executor_around_test_case</code></a>: <code>true</code></li>
<li><a href="#config-active-support-hash-digest-class"><code>config.active_support.hash_digest_class</code></a>: <code>OpenSSL::Digest::SHA256</code></li>
<li><a href="#config-active-support-key-generator-hash-digest-class"><code>config.active_support.key_generator_hash_digest_class</code></a>: <code>OpenSSL::Digest::SHA256</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-6-1"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-6-1"><span>3.1.4</span> Valores por Defecto para la Versión Objetivo 6.1</a></h4>
<ul>
<li><a href="#activesupport-utc-to-local-returns-utc-offset-times"><code>ActiveSupport.utc_to_local_returns_utc_offset_times</code></a>: <code>true</code></li>
<li><a href="#config-action-dispatch-cookies-same-site-protection"><code>config.action_dispatch.cookies_same_site_protection</code></a>: <code>:lax</code></li>
<li><a href="#config-action-dispatch-ssl-default-redirect-status"><code>config.action_dispatch.ssl_default_redirect_status</code></a>: <code>308</code></li>
<li><a href="#config-action-mailbox-queues-incineration"><code>config.action_mailbox.queues.incineration</code></a>: <code>nil</code></li>
<li><a href="#config-action-mailbox-queues-routing"><code>config.action_mailbox.queues.routing</code></a>: <code>nil</code></li>
<li><a href="#config-action-mailer-deliver-later-queue-name"><code>config.action_mailer.deliver_later_queue_name</code></a>: <code>nil</code></li>
<li><a href="#config-action-view-form-with-generates-remote-forms"><code>config.action_view.form_with_generates_remote_forms</code></a>: <code>false</code></li>
<li><a href="#config-action-view-preload-links-header"><code>config.action_view.preload_links_header</code></a>: <code>true</code></li>
<li><a href="#config-active-job-retry-jitter"><code>config.active_job.retry_jitter</code></a>: <code>0.15</code></li>
<li><a href="#config-active-record-has-many-inversing"><code>config.active_record.has_many_inversing</code></a>: <code>true</code></li>
<li><a href="#config-active-storage-queues-analysis"><code>config.active_storage.queues.analysis</code></a>: <code>nil</code></li>
<li><a href="#config-active-storage-queues-purge"><code>config.active_storage.queues.purge</code></a>: <code>nil</code></li>
<li><a href="#config-active-storage-track-variants"><code>config.active_storage.track_variants</code></a>: <code>true</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-6-0"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-6-0"><span>3.1.5</span> Valores por Defecto para la Versión Objetivo 6.0</a></h4>
<ul>
<li><a href="#config-action-dispatch-use-cookies-with-metadata"><code>config.action_dispatch.use_cookies_with_metadata</code></a>: <code>true</code></li>
<li><a href="#config-action-mailer-delivery-job"><code>config.action_mailer.delivery_job</code></a>: <code>"ActionMailer::MailDeliveryJob"</code></li>
<li><a href="#config-action-view-default-enforce-utf8"><code>config.action_view.default_enforce_utf8</code></a>: <code>false</code></li>
<li><a href="#config-active-record-collection-cache-versioning"><code>config.active_record.collection_cache_versioning</code></a>: <code>true</code></li>
<li><a href="#config-active-storage-queues-analysis"><code>config.active_storage.queues.analysis</code></a>: <code>:active_storage_analysis</code></li>
<li><a href="#config-active-storage-queues-purge"><code>config.active_storage.queues.purge</code></a>: <code>:active_storage_purge</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-5-2"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-5-2"><span>3.1.6</span> Valores por Defecto para la Versión Objetivo 5.2</a></h4>
<ul>
<li><a href="#config-action-controller-default-protect-from-forgery"><code>config.action_controller.default_protect_from_forgery</code></a>: <code>true</code></li>
<li><a href="#config-action-dispatch-use-authenticated-cookie-encryption"><code>config.action_dispatch.use_authenticated_cookie_encryption</code></a>: <code>true</code></li>
<li><a href="#config-action-view-form-with-generates-ids"><code>config.action_view.form_with_generates_ids</code></a>: <code>true</code></li>
<li><a href="#config-active-record-cache-versioning"><code>config.active_record.cache_versioning</code></a>: <code>true</code></li>
<li><a href="#config-active-support-hash-digest-class"><code>config.active_support.hash_digest_class</code></a>: <code>OpenSSL::Digest::SHA1</code></li>
<li><a href="#config-active-support-use-authenticated-message-encryption"><code>config.active_support.use_authenticated_message_encryption</code></a>: <code>true</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-5-1"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-5-1"><span>3.1.7</span> Valores por Defecto para la Versión Objetivo 5.1</a></h4>
<ul>
<li><a href="#config-action-view-form-with-generates-remote-forms"><code>config.action_view.form_with_generates_remote_forms</code></a>: <code>true</code></li>
<li><a href="#config-assets-unknown-asset-fallback"><code>config.assets.unknown_asset_fallback</code></a>: <code>false</code></li>
</ul>
<h4 id="valores-por-defecto-para-la-versión-objetivo-5-0"><a class="anchorlink" href="#valores-por-defecto-para-la-versión-objetivo-5-0"><span>3.1.8</span> Valores por Defecto para la Versión Objetivo 5.0</a></h4>
<ul>
<li><a href="#activesupport-to-time-preserves-timezone"><code>ActiveSupport.to_time_preserves_timezone</code></a>: <code>true</code></li>
<li><a href="#config-action-controller-forgery-protection-origin-check"><code>config.action_controller.forgery_protection_origin_check</code></a>: <code>true</code></li>
<li><a href="#config-action-controller-per-form-csrf-tokens"><code>config.action_controller.per_form_csrf_tokens</code></a>: <code>true</code></li>
<li><a href="#config-active-record-belongs-to-required-by-default"><code>config.active_record.belongs_to_required_by_default</code></a>: <code>true</code></li>
<li><a href="#config-ssl-options"><code>config.ssl_options</code></a>: <code>{ hsts: { subdomains: true } }</code></li>
</ul>
<h3 id="configuración-general-de-rails"><a class="anchorlink" href="#configuración-general-de-rails"><span>3.2</span> Configuración General de Rails</a></h3><p>Los siguientes métodos de configuración deben ser llamados en un objeto <code>Rails::Railtie</code>, como una subclase de <code>Rails::Engine</code> o <code>Rails::Application</code>.</p><h4 id="config-add-autoload-paths-to-load-path"><a class="anchorlink" href="#config-add-autoload-paths-to-load-path"><span>3.2.1</span> <code>config.add_autoload_paths_to_load_path</code></a></h4><p>Indica si las rutas de carga automática deben agregarse a <code>$LOAD_PATH</code>. Se recomienda establecerlo en <code>false</code> en el modo <code>:zeitwerk</code> temprano, en <code>config/application.rb</code>. Zeitwerk utiliza rutas absolutas internamente, y las aplicaciones que se ejecutan en modo <code>:zeitwerk</code> no necesitan <code>require_dependency</code>, por lo que los modelos, controladores, trabajos, etc. no necesitan estar en <code>$LOAD_PATH</code>. Establecer esto en <code>false</code> ahorra a Ruby de verificar estos directorios al resolver llamadas <code>require</code> con rutas relativas, y ahorra trabajo y RAM a Bootsnap, ya que no necesita construir un índice para ellos.</p><p>El valor predeterminado depende de la versión objetivo de <code>config.load_defaults</code>:</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>true</code></td>
</tr>
<tr>
<td>7.1</td>
<td><code>false</code></td>
</tr>
</tbody></table>
<p>El directorio <code>lib</code> no se ve afectado por este indicador, siempre se agrega a <code>$LOAD_PATH</code>.</p><h4 id="config-after-initialize"><a class="anchorlink" href="#config-after-initialize"><span>3.2.2</span> <code>config.after_initialize</code></a></h4><p>Toma un bloque que se ejecutará <em>después</em> de que Rails haya terminado de inicializar la aplicación. Eso incluye la inicialización del propio framework, motores y todos los inicializadores de la aplicación en <code>config/initializers</code>. Tenga en cuenta que este bloque <em>se</em> ejecutará para tareas rake. Útil para configurar valores establecidos por otros inicializadores:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">after_initialize</span> <span class="k">do</span>
<span class="no">ActionView</span><span class="o">::</span><span class="no">Base</span><span class="p">.</span><span class="nf">sanitized_allowed_tags</span><span class="p">.</span><span class="nf">delete</span> <span class="s1">'div'</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.after_initialize do
ActionView::Base.sanitized_allowed_tags.delete 'div'
end
">Copy</button>
</div>
<h4 id="config-after-routes-loaded"><a class="anchorlink" href="#config-after-routes-loaded"><span>3.2.3</span> <code>config.after_routes_loaded</code></a></h4><p>Toma un bloque que se ejecutará después de que Rails haya terminado de cargar las rutas de la aplicación. Este bloque también se ejecutará cada vez que se recarguen las rutas.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">after_routes_loaded</span> <span class="k">do</span>
<span class="c1"># Código que hace algo con Rails.application.routes</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.after_routes_loaded do
# Código que hace algo con Rails.application.routes
end
">Copy</button>
</div>
<h4 id="config-allow-concurrency"><a class="anchorlink" href="#config-allow-concurrency"><span>3.2.4</span> <code>config.allow_concurrency</code></a></h4><p>Controla si las solicitudes deben manejarse de manera concurrente. Esto solo debe establecerse en <code>false</code> si el código de la aplicación no es seguro para hilos. Por defecto es <code>true</code>.</p><h4 id="config-asset-host"><a class="anchorlink" href="#config-asset-host"><span>3.2.5</span> <code>config.asset_host</code></a></h4><p>Establece el host para los activos. Útil cuando se utilizan CDNs para alojar activos, o cuando se desea trabajar alrededor de las restricciones de concurrencia incorporadas en los navegadores utilizando diferentes alias de dominio. Versión más corta de <code>config.action_controller.asset_host</code>.</p><h4 id="config-assume-ssl"><a class="anchorlink" href="#config-assume-ssl"><span>3.2.6</span> <code>config.assume_ssl</code></a></h4><p>Hace que la aplicación crea que todas las solicitudes están llegando a través de SSL. Esto es útil cuando se pasa a través de un equilibrador de carga que termina SSL, la solicitud reenviada parecerá ser HTTP en lugar de HTTPS para la aplicación. Esto hace que los redireccionamientos y la seguridad de las cookies apunten a HTTP en lugar de HTTPS. Este middleware hace que el servidor asuma que el proxy ya ha terminado SSL, y que la solicitud realmente es HTTPS.</p><h4 id="config-autoflush-log"><a class="anchorlink" href="#config-autoflush-log"><span>3.2.7</span> <code>config.autoflush_log</code></a></h4><p>Habilita la escritura de salida del archivo de registro inmediatamente en lugar de almacenarla en búfer. Por defecto es <code>true</code>.</p><h4 id="config-autoload-lib-ignore"><a class="anchorlink" href="#config-autoload-lib-ignore"><span>3.2.8</span> <code>config.autoload_lib(ignore:)</code></a></h4><p>Este método agrega <code>lib</code> a <code>config.autoload_paths</code> y <code>config.eager_load_paths</code>.</p><p>Normalmente, el directorio <code>lib</code> tiene subdirectorios que no deben cargarse automáticamente ni cargarse de manera ansiosa. Por favor, pase su nombre relativo a <code>lib</code> en el argumento requerido <code>ignore</code>. Por ejemplo,</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">autoload_lib</span><span class="p">(</span><span class="ss">ignore: </span><span class="sx">%w(assets tasks generators)</span><span class="p">)</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.autoload_lib(ignore: %w(assets tasks generators))
">Copy</button>
</div>
<p>Por favor, vea más detalles en la <a href="autoloading_and_reloading_constants.html">guía de carga automática</a>.</p><h4 id="config-autoload-lib-once-ignore"><a class="anchorlink" href="#config-autoload-lib-once-ignore"><span>3.2.9</span> <code>config.autoload_lib_once(ignore:)</code></a></h4><p>El método <code>config.autoload_lib_once</code> es similar a <code>config.autoload_lib</code>, excepto que agrega <code>lib</code> a <code>config.autoload_once_paths</code> en su lugar.</p><p>Al llamar a <code>config.autoload_lib_once</code>, las clases y módulos en <code>lib</code> pueden cargarse automáticamente, incluso desde inicializadores de la aplicación, pero no se recargarán.</p><h4 id="config-autoload-once-paths"><a class="anchorlink" href="#config-autoload-once-paths"><span>3.2.10</span> <code>config.autoload_once_paths</code></a></h4><p>Acepta un array de rutas desde las cuales Rails cargará automáticamente constantes que no se borrarán por solicitud. Relevante si la recarga está habilitada, lo cual está por defecto en el entorno <code>development</code>. De lo contrario, toda la carga automática ocurre solo una vez. Todos los elementos de este array también deben estar en <code>autoload_paths</code>. Por defecto es un array vacío.</p><h4 id="config-autoload-paths"><a class="anchorlink" href="#config-autoload-paths"><span>3.2.11</span> <code>config.autoload_paths</code></a></h4><p>Acepta un array de rutas desde las cuales Rails cargará automáticamente constantes. Por defecto es un array vacío. Desde <a href="upgrading_ruby_on_rails.html#autoloading">Rails 6</a>, no se recomienda ajustar esto. Vea <a href="autoloading_and_reloading_constants.html#autoload-paths">Carga Automática y Recarga de Constantes</a>.</p><h4 id="config-beginning-of-week"><a class="anchorlink" href="#config-beginning-of-week"><span>3.2.12</span> <code>config.beginning_of_week</code></a></h4><p>Establece el inicio de semana predeterminado para la aplicación. Acepta un día válido de la semana como símbolo (por ejemplo, <code>:monday</code>).</p><h4 id="config-cache-classes"><a class="anchorlink" href="#config-cache-classes"><span>3.2.13</span> <code>config.cache_classes</code></a></h4><p>Configuración antigua equivalente a <code>!config.enable_reloading</code>. Admitido por compatibilidad con versiones anteriores.</p><h4 id="config-cache-store"><a class="anchorlink" href="#config-cache-store"><span>3.2.14</span> <code>config.cache_store</code></a></h4><p>Configura qué tienda de caché usar para el almacenamiento en caché de Rails. Las opciones incluyen uno de los símbolos <code>:memory_store</code>, <code>:file_store</code>, <code>:mem_cache_store</code>, <code>:null_store</code>, <code>:redis_cache_store</code>, o un objeto que implemente la API de caché. Por defecto es <code>:file_store</code>. Vea <a href="caching_with_rails.html#cache-stores">Tiendas de Caché</a> para opciones de configuración por tienda.</p><h4 id="config-colorize-logging"><a class="anchorlink" href="#config-colorize-logging"><span>3.2.15</span> <code>config.colorize_logging</code></a></h4><p>Especifica si usar o no códigos de color ANSI al registrar información. Por defecto es <code>true</code>.</p><h4 id="config-consider-all-requests-local"><a class="anchorlink" href="#config-consider-all-requests-local"><span>3.2.16</span> <code>config.consider_all_requests_local</code></a></h4><p>Es un indicador. Si es <code>true</code>, entonces cualquier error causará que se vuelque información detallada de depuración en la respuesta HTTP, y el controlador <code>Rails::Info</code> mostrará el contexto de tiempo de ejecución de la aplicación en <code>/rails/info/properties</code>. <code>true</code> por defecto en los entornos de desarrollo y prueba, y <code>false</code> en producción. Para un control más fino, establezca esto en <code>false</code> e implemente <code>show_detailed_exceptions?</code> en los controladores para especificar qué solicitudes deben proporcionar información de depuración sobre errores.</p><h4 id="config-console"><a class="anchorlink" href="#config-console"><span>3.2.17</span> <code>config.console</code></a></h4><p>Le permite establecer la clase que se usará como consola cuando ejecute <code>bin/rails console</code>. Es mejor ejecutarlo en el bloque <code>console</code>:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">console</span> <span class="k">do</span>
<span class="c1"># este bloque se llama solo cuando se ejecuta la consola,</span>
<span class="c1"># por lo que podemos requerir pry aquí de manera segura</span>
<span class="nb">require</span> <span class="s2">"pry"</span>
<span class="n">config</span><span class="p">.</span><span class="nf">console</span> <span class="o">=</span> <span class="no">Pry</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="console do
# este bloque se llama solo cuando se ejecuta la consola,
# por lo que podemos requerir pry aquí de manera segura
require "pry"
config.console = Pry
end
">Copy</button>
</div>
<h4 id="config-content-security-policy-nonce-directives"><a class="anchorlink" href="#config-content-security-policy-nonce-directives"><span>3.2.18</span> <code>config.content_security_policy_nonce_directives</code></a></h4><p>Vea <a href="security.html#adding-a-nonce">Agregando un Nonce</a> en la Guía de Seguridad</p><h4 id="config-content-security-policy-nonce-generator"><a class="anchorlink" href="#config-content-security-policy-nonce-generator"><span>3.2.19</span> <code>config.content_security_policy_nonce_generator</code></a></h4><p>Vea <a href="security.html#adding-a-nonce">Agregando un Nonce</a> en la Guía de Seguridad</p><h4 id="config-content-security-policy-report-only"><a class="anchorlink" href="#config-content-security-policy-report-only"><span>3.2.20</span> <code>config.content_security_policy_report_only</code></a></h4><p>Vea <a href="security.html#reporting-violations">Informando Violaciones</a> en la Guía de Seguridad</p><h4 id="config-credentials-content-path"><a class="anchorlink" href="#config-credentials-content-path"><span>3.2.21</span> <code>config.credentials.content_path</code></a></h4><p>La ruta del archivo de credenciales encriptado.</p><p>Por defecto es <code>config/credentials/#{Rails.env}.yml.enc</code> si existe, o
<code>config/credentials.yml.enc</code> de lo contrario.</p><p>NOTA: Para que los comandos <code>bin/rails credentials</code> reconozcan este valor,
debe establecerse en <code>config/application.rb</code> o <code>config/environments/#{Rails.env}.rb</code>.</p><h4 id="config-credentials-key-path"><a class="anchorlink" href="#config-credentials-key-path"><span>3.2.22</span> <code>config.credentials.key_path</code></a></h4><p>La ruta del archivo de clave de credenciales encriptadas.</p><p>Por defecto es <code>config/credentials/#{Rails.env}.key</code> si existe, o
<code>config/master.key</code> de lo contrario.</p><p>NOTA: Para que los comandos <code>bin/rails credentials</code> reconozcan este valor,
debe establecerse en <code>config/application.rb</code> o <code>config/environments/#{Rails.env}.rb</code>.</p><h4 id="config-debug-exception-response-format"><a class="anchorlink" href="#config-debug-exception-response-format"><span>3.2.23</span> <code>config.debug_exception_response_format</code></a></h4><p>Establece el formato utilizado en las respuestas cuando ocurren errores en el entorno de desarrollo. Por defecto es <code>:api</code> para aplicaciones solo API y <code>:default</code> para aplicaciones normales.</p><h4 id="config-disable-sandbox"><a class="anchorlink" href="#config-disable-sandbox"><span>3.2.24</span> <code>config.disable_sandbox</code></a></h4><p>Controla si alguien puede iniciar una consola en modo sandbox. Esto es útil para evitar una sesión prolongada de consola sandbox, que podría llevar a que un servidor de base de datos se quede sin memoria. Por defecto es <code>false</code>.</p><h4 id="config-dom-testing-default-html-version"><a class="anchorlink" href="#config-dom-testing-default-html-version"><span>3.2.25</span> <code>config.dom_testing_default_html_version</code></a></h4><p>Controla si un analizador HTML4 o un analizador HTML5 se usa por defecto por los ayudantes de prueba en Action View, Action Dispatch y <code>rails-dom-testing</code>.</p><p>El valor predeterminado depende de la versión objetivo de <code>config.load_defaults</code>:</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>:html4</code></td>
</tr>
<tr>
<td>7.1</td>
<td><code>:html5</code> (ver NOTA)</td>
</tr>
</tbody></table>
<p>NOTA: El analizador HTML5 de Nokogiri no es compatible con JRuby, por lo que en plataformas JRuby Rails volverá a <code>:html4</code>.</p><h4 id="config-eager-load"><a class="anchorlink" href="#config-eager-load"><span>3.2.26</span> <code>config.eager_load</code></a></h4><p>Cuando es <code>true</code>, carga ansiosamente todos los espacios de nombres registrados en <code>config.eager_load_namespaces</code>. Esto incluye su aplicación, motores, frameworks de Rails y cualquier otro espacio de nombres registrado.</p><h4 id="config-eager-load-namespaces"><a class="anchorlink" href="#config-eager-load-namespaces"><span>3.2.27</span> <code>config.eager_load_namespaces</code></a></h4><p>Registra espacios de nombres que se cargan ansiosamente cuando <code>config.eager_load</code> está establecido en <code>true</code>. Todos los espacios de nombres en la lista deben responder al método <code>eager_load!</code>.</p><h4 id="config-eager-load-paths"><a class="anchorlink" href="#config-eager-load-paths"><span>3.2.28</span> <code>config.eager_load_paths</code></a></h4><p>Acepta un array de rutas desde las cuales Rails cargará ansiosamente al iniciar si <code>config.eager_load</code> es verdadero. Por defecto es cada carpeta en el directorio <code>app</code> de la aplicación.</p><h4 id="config-enable-reloading"><a class="anchorlink" href="#config-enable-reloading"><span>3.2.29</span> <code>config.enable_reloading</code></a></h4><p>Si <code>config.enable_reloading</code> es verdadero, las clases y módulos de la aplicación se recargan entre solicitudes web si cambian. Por defecto es <code>true</code> en el entorno <code>development</code>, y <code>false</code> en el entorno <code>production</code>.</p><p>También se define el predicado <code>config.reloading_enabled?</code>.</p><h4 id="config-encoding"><a class="anchorlink" href="#config-encoding"><span>3.2.30</span> <code>config.encoding</code></a></h4><p>Configura la codificación a nivel de aplicación. Por defecto es UTF-8.</p><h4 id="config-exceptions-app"><a class="anchorlink" href="#config-exceptions-app"><span>3.2.31</span> <code>config.exceptions_app</code></a></h4><p>Establece la aplicación de excepciones invocada por el middleware <code>ShowException</code> cuando ocurre una excepción.
Por defecto es <code>ActionDispatch::PublicExceptions.new(Rails.public_path)</code>.</p><p>Las aplicaciones de excepciones necesitan manejar errores <code>ActionDispatch::Http::MimeNegotiation::InvalidType</code>, que se lanzan cuando un cliente envía un encabezado <code>Accept</code> o <code>Content-Type</code> no válido.
La aplicación <code>ActionDispatch::PublicExceptions</code> por defecto hace esto automáticamente, estableciendo <code>Content-Type</code> a <code>text/html</code> y devolviendo un estado <code>406 Not Acceptable</code>.
No manejar este error resultará en un <code>500 Internal Server Error</code>.</p><p>Usar el <code>Rails.application.routes</code> <code>RouteSet</code> como la aplicación de excepciones también requiere este manejo especial.
Podría verse algo así:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="c1"># config/application.rb</span>
<span class="n">config</span><span class="p">.</span><span class="nf">exceptions_app</span> <span class="o">=</span> <span class="no">CustomExceptionsAppWrapper</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">exceptions_app: </span><span class="n">routes</span><span class="p">)</span>
<span class="c1"># lib/custom_exceptions_app_wrapper.rb</span>
<span class="k">class</span> <span class="nc">CustomExceptionsAppWrapper</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">exceptions_app</span><span class="p">:)</span>
<span class="vi">@exceptions_app</span> <span class="o">=</span> <span class="n">exceptions_app</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
<span class="n">request</span> <span class="o">=</span> <span class="no">ActionDispatch</span><span class="o">::</span><span class="no">Request</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
<span class="n">fallback_to_html_format_if_invalid_mime_type</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="vi">@exceptions_app</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">env</span><span class="p">)</span>
<span class="k">end</span>
<span class="kp">private</span>
<span class="k">def</span> <span class="nf">fallback_to_html_format_if_invalid_mime_type</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
<span class="n">request</span><span class="p">.</span><span class="nf">formats</span>
<span class="k">rescue</span> <span class="no">ActionDispatch</span><span class="o">::</span><span class="no">Http</span><span class="o">::</span><span class="no">MimeNegotiation</span><span class="o">::</span><span class="no">InvalidType</span>
<span class="n">request</span><span class="p">.</span><span class="nf">set_header</span> <span class="s2">"CONTENT_TYPE"</span><span class="p">,</span> <span class="s2">"text/html"</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.exceptions_app = CustomExceptionsAppWrapper.new(exceptions_app: routes)
class CustomExceptionsAppWrapper
def initialize(exceptions_app:)
@exceptions_app = exceptions_app
end
def call(env)
request = ActionDispatch::Request.new(env)
fallback_to_html_format_if_invalid_mime_type(request)
@exceptions_app.call(env)
end
private
def fallback_to_html_format_if_invalid_mime_type(request)
request.formats
rescue ActionDispatch::Http::MimeNegotiation::InvalidType
request.set_header "CONTENT_TYPE", "text/html"
end
end
">Copy</button>
</div>
<h4 id="config-file-watcher"><a class="anchorlink" href="#config-file-watcher"><span>3.2.32</span> <code>config.file_watcher</code></a></h4><p>Es la clase utilizada para detectar actualizaciones de archivos en el sistema de archivos cuando <code>config.reload_classes_only_on_change</code> es <code>true</code>. Rails se envía con <code>ActiveSupport::FileUpdateChecker</code>, el predeterminado, y <code>ActiveSupport::EventedFileUpdateChecker</code> (este depende de la gema <a href="https://github.com/guard/listen">listen</a>). Las clases personalizadas deben ajustarse a la API de <code>ActiveSupport::FileUpdateChecker</code>.</p><h4 id="config-filter-parameters"><a class="anchorlink" href="#config-filter-parameters"><span>3.2.33</span> <code>config.filter_parameters</code></a></h4><p>Utilizado para filtrar los parámetros que no desea que se muestren en los registros,
como contraseñas o números de tarjetas de crédito. También filtra valores sensibles
de columnas de base de datos al llamar a <code>#inspect</code> en un objeto Active Record. Por
defecto, Rails filtra las contraseñas agregando los siguientes filtros en
<code>config/initializers/filter_parameter_logging.rb</code>.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">filter_parameters</span> <span class="o">+=</span> <span class="p">[</span>
<span class="ss">:passw</span><span class="p">,</span> <span class="ss">:email</span><span class="p">,</span> <span class="ss">:secret</span><span class="p">,</span> <span class="ss">:token</span><span class="p">,</span> <span class="ss">:_key</span><span class="p">,</span> <span class="ss">:crypt</span><span class="p">,</span> <span class="ss">:salt</span><span class="p">,</span> <span class="ss">:certificate</span><span class="p">,</span> <span class="ss">:otp</span><span class="p">,</span> <span class="ss">:ssn</span>
<span class="p">]</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="Rails.application.config.filter_parameters += [
:passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
">Copy</button>
</div>
<p>El filtro de parámetros funciona mediante coincidencia parcial de expresión regular.</p><h4 id="config-filter-redirect"><a class="anchorlink" href="#config-filter-redirect"><span>3.2.34</span> <code>config.filter_redirect</code></a></h4><p>Utilizado para filtrar urls de redirección de los registros de la aplicación.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">filter_redirect</span> <span class="o">+=</span> <span class="p">[</span><span class="s1">'s3.amazonaws.com'</span><span class="p">,</span> <span class="sr">/private-match/</span><span class="p">]</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="Rails.application.config.filter_redirect += ['s3.amazonaws.com', /private-match/]
">Copy</button>
</div>
<p>El filtro de redirección funciona probando que las urls incluyan cadenas o coincidan con expresiones regulares.</p><h4 id="config-force-ssl"><a class="anchorlink" href="#config-force-ssl"><span>3.2.35</span> <code>config.force_ssl</code></a></h4><p>Fuerza que todas las solicitudes se sirvan a través de HTTPS y establece "https://" como el protocolo predeterminado al generar URLs. La aplicación de HTTPS se maneja mediante el middleware <code>ActionDispatch::SSL</code>, que puede configurarse a través de <code>config.ssl_options</code>.</p><h4 id="config-helpers-paths"><a class="anchorlink" href="#config-helpers-paths"><span>3.2.36</span> <code>config.helpers_paths</code></a></h4><p>Define un array de rutas adicionales para cargar ayudantes de vista.</p><h4 id="config-host-authorization"><a class="anchorlink" href="#config-host-authorization"><span>3.2.37</span> <code>config.host_authorization</code></a></h4><p>Acepta un hash de opciones para configurar el <a href="#actiondispatch-hostauthorization">middleware de Autorización de Host</a></p><h4 id="config-hosts"><a class="anchorlink" href="#config-hosts"><span>3.2.38</span> <code>config.hosts</code></a></h4><p>Un array de cadenas, expresiones regulares o <code>IPAddr</code> utilizado para validar el
encabezado <code>Host</code>. Utilizado por el <a href="#actiondispatch-hostauthorization">middleware de Autorización de Host</a> para ayudar a prevenir ataques de reencaminamiento de DNS.</p><h4 id="config-javascript-path"><a class="anchorlink" href="#config-javascript-path"><span>3.2.39</span> <code>config.javascript_path</code></a></h4><p>Establece la ruta donde vive el JavaScript de su aplicación en relación con el directorio <code>app</code> y el valor predeterminado es <code>javascript</code>.
La <code>javascript_path</code> configurada de una aplicación se excluirá de <code>autoload_paths</code>.</p><h4 id="config-log-file-size"><a class="anchorlink" href="#config-log-file-size"><span>3.2.40</span> <code>config.log_file_size</code></a></h4><p>Define el tamaño máximo del archivo de registro de Rails en bytes. Por defecto es <code>104_857_600</code> (100 MiB) en desarrollo y prueba, e ilimitado en todos los demás entornos.</p><h4 id="config-log-formatter"><a class="anchorlink" href="#config-log-formatter"><span>3.2.41</span> <code>config.log_formatter</code></a></h4><p>Define el formateador del registrador de Rails. Esta opción por defecto es una instancia de <code>ActiveSupport::Logger::SimpleFormatter</code> para todos los entornos. Si está estableciendo un valor para <code>config.logger</code>, debe pasar manualmente el valor de su formateador a su registrador antes de que sea envuelto en una instancia de <code>ActiveSupport::TaggedLogging</code>, Rails no lo hará por usted.</p><h4 id="config-log-level"><a class="anchorlink" href="#config-log-level"><span>3.2.42</span> <code>config.log_level</code></a></h4><p>Define la verbosidad del registrador de Rails. Esta opción por defecto es <code>:debug</code> para todos los entornos excepto producción, donde por defecto es <code>:info</code>. Los niveles de registro disponibles son: <code>:debug</code>, <code>:info</code>, <code>:warn</code>, <code>:error</code>, <code>:fatal</code> y <code>:unknown</code>.</p><h4 id="config-log-tags"><a class="anchorlink" href="#config-log-tags"><span>3.2.43</span> <code>config.log_tags</code></a></h4><p>Acepta una lista de métodos a los que el objeto <code>request</code> responde, un <code>Proc</code> que acepta el objeto <code>request</code>, o algo que responde a <code>to_s</code>. Esto facilita etiquetar líneas de registro con información de depuración como subdominio e id de solicitud, ambos muy útiles para depurar aplicaciones de producción multiusuario.</p><h4 id="config-logger"><a class="anchorlink" href="#config-logger"><span>3.2.44</span> <code>config.logger</code></a></h4><p>Es el registrador que se usará para <code>Rails.logger</code> y cualquier registro relacionado con Rails como <code>ActiveRecord::Base.logger</code>. Por defecto es una instancia de <code>ActiveSupport::TaggedLogging</code> que envuelve una instancia de <code>ActiveSupport::Logger</code> que genera un registro en el directorio <code>log/</code>. Puede proporcionar un registrador personalizado, para obtener compatibilidad completa debe seguir estas pautas:</p>
<ul>
<li>Para admitir un formateador, debe asignar manualmente un formateador del valor <code>config.log_formatter</code> al registrador.</li>
<li>Para admitir registros etiquetados, la instancia de registro debe estar envuelta con <code>ActiveSupport::TaggedLogging</code>.</li>
<li>Para admitir silenciamiento, el registrador debe incluir el módulo <code>ActiveSupport::LoggerSilence</code>. La clase <code>ActiveSupport::Logger</code> ya incluye estos módulos.</li>
</ul>
<div class="interstitial code">
<pre><code class="highlight ruby"><span class="k">class</span> <span class="nc">MyLogger</span> <span class="o"><</span> <span class="o">::</span><span class="no">Logger</span>
<span class="kp">include</span> <span class="no">ActiveSupport</span><span class="o">::</span><span class="no">LoggerSilence</span>
<span class="k">end</span>
<span class="n">mylogger</span> <span class="o">=</span> <span class="no">MyLogger</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="no">STDOUT</span><span class="p">)</span>
<span class="n">mylogger</span><span class="p">.</span><span class="nf">formatter</span> <span class="o">=</span> <span class="n">config</span><span class="p">.</span><span class="nf">log_formatter</span>
<span class="n">config</span><span class="p">.</span><span class="nf">logger</span> <span class="o">=</span> <span class="no">ActiveSupport</span><span class="o">::</span><span class="no">TaggedLogging</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">mylogger</span><span class="p">)</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="class MyLogger < ::Logger
include ActiveSupport::LoggerSilence
end
mylogger = MyLogger.new(STDOUT)
mylogger.formatter = config.log_formatter
config.logger = ActiveSupport::TaggedLogging.new(mylogger)
">Copy</button>
</div>
<h4 id="config-middleware"><a class="anchorlink" href="#config-middleware"><span>3.2.45</span> <code>config.middleware</code></a></h4><p>Le permite configurar el middleware de la aplicación. Esto se cubre en profundidad en la sección <a href="#configuring-middleware">Configuración de Middleware</a> a continuación.</p><h4 id="config-precompile-filter-parameters"><a class="anchorlink" href="#config-precompile-filter-parameters"><span>3.2.46</span> <code>config.precompile_filter_parameters</code></a></h4><p>Cuando es <code>true</code>, precompilará <a href="#config-filter-parameters"><code>config.filter_parameters</code></a>
usando <a href="https://edgeapi.rubyonrails.org/classes/ActiveSupport/ParameterFilter.html#method-c-precompile_filters"><code>ActiveSupport::ParameterFilter.precompile_filters</code></a>.</p><p>El valor predeterminado depende de la versión objetivo de <code>config.load_defaults</code>:</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>false</code></td>
</tr>
<tr>
<td>7.1</td>
<td><code>true</code></td>
</tr>
</tbody></table>
<h4 id="config-public-file-server-enabled"><a class="anchorlink" href="#config-public-file-server-enabled"><span>3.2.47</span> <code>config.public_file_server.enabled</code></a></h4><p>Configura si Rails debe servir archivos estáticos desde el directorio público.
Por defecto es <code>true</code>.</p><p>Si el software del servidor (por ejemplo, NGINX o Apache) debe servir archivos estáticos en su lugar,
establezca este valor en <code>false</code>.</p><h4 id="config-railties-order"><a class="anchorlink" href="#config-railties-order"><span>3.2.48</span> <code>config.railties_order</code></a></h4><p>Permite especificar manualmente el orden en que se cargan Railties/Engines. El
valor predeterminado es <code>[:all]</code>.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">railties_order</span> <span class="o">=</span> <span class="p">[</span><span class="no">Blog</span><span class="o">::</span><span class="no">Engine</span><span class="p">,</span> <span class="ss">:main_app</span><span class="p">,</span> <span class="ss">:all</span><span class="p">]</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.railties_order = [Blog::Engine, :main_app, :all]
">Copy</button>
</div>
<h4 id="config-rake-eager-load"><a class="anchorlink" href="#config-rake-eager-load"><span>3.2.49</span> <code>config.rake_eager_load</code></a></h4><p>Cuando es <code>true</code>, carga ansiosamente la aplicación al ejecutar tareas Rake. Por defecto es <code>false</code>.</p><h4 id="config-read-encrypted-secrets"><a class="anchorlink" href="#config-read-encrypted-secrets"><span>3.2.50</span> <code>config.read_encrypted_secrets</code></a></h4><p><em>DESAPROBADO</em>: Debería estar usando
<a href="https://guides.rubyonrails.org/security.html#custom-credentials">credenciales</a>
en lugar de secretos encriptados.</p><p>Cuando es <code>true</code>, intentará leer secretos encriptados desde <code>config/secrets.yml.enc</code></p><h4 id="config-relative-url-root"><a class="anchorlink" href="#config-relative-url-root"><span>3.2.51</span> <code>config.relative_url_root</code></a></h4><p>Puede usarse para decirle a Rails que está <a href="configuring.html#deploy-to-a-subdirectory-relative-url-root">desplegando en un subdirectorio</a>. El valor por defecto
es <code>ENV['RAILS_RELATIVE_URL_ROOT']</code>.</p><h4 id="config-reload-classes-only-on-change"><a class="anchorlink" href="#config-reload-classes-only-on-change"><span>3.2.52</span> <code>config.reload_classes_only_on_change</code></a></h4><p>Habilita o deshabilita la recarga de clases solo cuando cambian los archivos rastreados. Por defecto rastrea todo en rutas de carga automática y está establecido en <code>true</code>. Si <code>config.enable_reloading</code> es <code>false</code>, esta opción se ignora.</p><h4 id="config-require-master-key"><a class="anchorlink" href="#config-require-master-key"><span>3.2.53</span> <code>config.require_master_key</code></a></h4><p>Hace que la aplicación no se inicie si no se ha puesto a disposición una clave maestra a través de <code>ENV["RAILS_MASTER_KEY"]</code> o el archivo <code>config/master.key</code>.</p><h4 id="config-sandbox-by-default"><a class="anchorlink" href="#config-sandbox-by-default"><span>3.2.54</span> <code>config.sandbox_by_default</code></a></h4><p>Cuando es <code>true</code>, la consola de rails comienza en modo sandbox. Para iniciar la consola de rails en modo no sandbox, debe especificarse <code>--no-sandbox</code>. Esto es útil para evitar escrituras accidentales en la base de datos de producción. Por defecto es <code>false</code>.</p><h4 id="config-secret-key-base"><a class="anchorlink" href="#config-secret-key-base"><span>3.2.55</span> <code>config.secret_key_base</code></a></h4><p>El respaldo para especificar la clave de entrada para el generador de claves de una aplicación.
Se recomienda dejar esto sin establecer y, en su lugar, especificar un <code>secret_key_base</code>
en <code>config/credentials.yml.enc</code>. Vea la <a href="https://edgeapi.rubyonrails.org/classes/Rails/Application.html#method-i-secret_key_base">documentación de la API de <code>secret_key_base</code></a>
para más información y métodos de configuración alternativos.</p><h4 id="config-server-timing"><a class="anchorlink" href="#config-server-timing"><span>3.2.56</span> <code>config.server_timing</code></a></h4><p>Cuando es <code>true</code>, agrega el <a href="#actiondispatch-servertiming">middleware <code>ServerTiming</code></a>
a la pila de middleware. Por defecto es <code>false</code>, pero está establecido en <code>true</code> en el
archivo <code>config/environments/development.rb</code> generado por defecto.</p><h4 id="config-session-options"><a class="anchorlink" href="#config-session-options"><span>3.2.57</span> <code>config.session_options</code></a></h4><p>Opciones adicionales pasadas a <code>config.session_store</code>. Debe usar
<code>config.session_store</code> para establecer esto en lugar de modificarlo usted mismo.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">session_store</span> <span class="ss">:cookie_store</span><span class="p">,</span> <span class="ss">key: </span><span class="s2">"_your_app_session"</span>
<span class="n">config</span><span class="p">.</span><span class="nf">session_options</span> <span class="c1"># => {key: "_your_app_session"}</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.session_store :cookie_store, key: "_your_app_session"
config.session_options # => {key: "_your_app_session"}
">Copy</button>
</div>
<h4 id="config-session-store"><a class="anchorlink" href="#config-session-store"><span>3.2.58</span> <code>config.session_store</code></a></h4><p>Especifica qué clase usar para almacenar la sesión. Los valores posibles son <code>:cache_store</code>, <code>:cookie_store</code>, <code>:mem_cache_store</code>, un almacén personalizado, o <code>:disabled</code>. <code>:disabled</code> indica a Rails que no se ocupe de las sesiones.</p><p>Esta configuración se configura mediante una llamada de método regular, en lugar de un setter. Esto permite pasar opciones adicionales:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">session_store</span> <span class="ss">:cookie_store</span><span class="p">,</span> <span class="ss">key: </span><span class="s2">"_your_app_session"</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.session_store :cookie_store, key: "_your_app_session"
">Copy</button>
</div>
<p>Si se especifica un almacén personalizado como símbolo, se resolverá en el espacio de nombres <code>ActionDispatch::Session</code>:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="c1"># usa ActionDispatch::Session::MyCustomStore como el almacén de sesión</span>
<span class="n">config</span><span class="p">.</span><span class="nf">session_store</span> <span class="ss">:my_custom_store</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="# usa ActionDispatch::Session::MyCustomStore como el almacén de sesión
config.session_store :my_custom_store
">Copy</button>
</div>
<p>El almacén predeterminado es un almacén de cookies con el nombre de la aplicación como clave de sesión.</p><h4 id="config-ssl-options"><a class="anchorlink" href="#config-ssl-options"><span>3.2.59</span> <code>config.ssl_options</code></a></h4><p>Opciones de configuración para el <a href="https://edgeapi.rubyonrails.org/classes/ActionDispatch/SSL.html">middleware <code>ActionDispatch::SSL</code></a>.</p><p>El valor predeterminado depende de la versión objetivo de <code>config.load_defaults</code>:</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>{}</code></td>
</tr>
<tr>
<td>5.0</td>
<td><code>{ hsts: { subdomains: true } }</code></td>
</tr>
</tbody></table>
<h4 id="config-time-zone"><a class="anchorlink" href="#config-time-zone"><span>3.2.60</span> <code>config.time_zone</code></a></h4><p>Establece la zona horaria predeterminada para la aplicación y habilita la conciencia de zona horaria para Active Record.</p><h4 id="config-x"><a class="anchorlink" href="#config-x"><span>3.2.61</span> <code>config.x</code></a></h4><p>Utilizado para agregar fácilmente configuración personalizada anidada al objeto de configuración de la aplicación</p><div class="interstitial code">
<pre><code class="highlight ruby"> <span class="n">config</span><span class="p">.</span><span class="nf">x</span><span class="p">.</span><span class="nf">payment_processing</span><span class="p">.</span><span class="nf">schedule</span> <span class="o">=</span> <span class="ss">:daily</span>
<span class="no">Rails</span><span class="p">.</span><span class="nf">configuration</span><span class="p">.</span><span class="nf">x</span><span class="p">.</span><span class="nf">payment_processing</span><span class="p">.</span><span class="nf">schedule</span> <span class="c1"># => :daily</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text=" config.x.payment_processing.schedule = :daily
Rails.configuration.x.payment_processing.schedule # => :daily
">Copy</button>
</div>
<p>Vea <a href="#custom-configuration">Configuración Personalizada</a></p><h4 id="config-yjit"><a class="anchorlink" href="#config-yjit"><span>3.2.62</span> <code>config.yjit</code></a></h4><p>Habilita YJIT a partir de Ruby 3.3, para ofrecer mejoras de rendimiento considerables. Si está
desplegando en un entorno con restricciones de memoria, es posible que desee establecer esto en <code>false</code>.</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>false</code></td>
</tr>
<tr>
<td>7.2</td>
<td><code>true</code></td>
</tr>
</tbody></table>
<h3 id="configuración-de-activos"><a class="anchorlink" href="#configuración-de-activos"><span>3.3</span> Configuración de Activos</a></h3><h4 id="config-assets-css-compressor"><a class="anchorlink" href="#config-assets-css-compressor"><span>3.3.1</span> <code>config.assets.css_compressor</code></a></h4><p>Define el compresor CSS a usar. Está configurado por defecto por <code>sass-rails</code>. El único valor alternativo en este momento es <code>:yui</code>, que utiliza la gema <code>yui-compressor</code>.</p><h4 id="config-assets-js-compressor"><a class="anchorlink" href="#config-assets-js-compressor"><span>3.3.2</span> <code>config.assets.js_compressor</code></a></h4><p>Define el compresor de JavaScript a usar. Los valores posibles son <code>:terser</code>, <code>:closure</code>, <code>:uglifier</code> y <code>:yui</code>, que requieren el uso de las gemas <code>terser</code>, <code>closure-compiler</code>, <code>uglifier</code> o <code>yui-compressor</code>, respectivamente.</p><h4 id="config-assets-gzip"><a class="anchorlink" href="#config-assets-gzip"><span>3.3.3</span> <code>config.assets.gzip</code></a></h4><p>Un indicador que habilita la creación de una versión comprimida en gzip de los activos compilados, junto con los activos no comprimidos. Establecido en <code>true</code> por defecto.</p><h4 id="config-assets-paths"><a class="anchorlink" href="#config-assets-paths"><span>3.3.4</span> <code>config.assets.paths</code></a></h4><p>Contiene las rutas que se utilizan para buscar activos. Agregar rutas a esta opción de configuración hará que esas rutas se utilicen en la búsqueda de activos.</p><h4 id="config-assets-precompile"><a class="anchorlink" href="#config-assets-precompile"><span>3.3.5</span> <code>config.assets.precompile</code></a></h4><p>Le permite especificar activos adicionales (además de <code>application.css</code> y <code>application.js</code>) que deben precompilarse cuando se ejecuta <code>bin/rails assets:precompile</code>.</p><h4 id="config-assets-unknown-asset-fallback"><a class="anchorlink" href="#config-assets-unknown-asset-fallback"><span>3.3.6</span> <code>config.assets.unknown_asset_fallback</code></a></h4><p>Le permite modificar el comportamiento de la tubería de activos cuando un activo no está en la tubería, si usa sprockets-rails 3.2.0 o más reciente.</p><p>El valor predeterminado depende de la versión objetivo de <code>config.load_defaults</code>:</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>true</code></td>
</tr>
<tr>
<td>5.1</td>
<td><code>false</code></td>
</tr>
</tbody></table>
<h4 id="config-assets-prefix"><a class="anchorlink" href="#config-assets-prefix"><span>3.3.7</span> <code>config.assets.prefix</code></a></h4><p>Define el prefijo desde donde se sirven los activos. Por defecto es <code>/assets</code>.</p><h4 id="config-assets-manifest"><a class="anchorlink" href="#config-assets-manifest"><span>3.3.8</span> <code>config.assets.manifest</code></a></h4><p>Define la ruta completa que se usará para el archivo de manifiesto del precompilador de activos. Por defecto es un archivo llamado <code>manifest-<random>.json</code> en el directorio <code>config.assets.prefix</code> dentro de la carpeta pública.</p><h4 id="config-assets-digest"><a class="anchorlink" href="#config-assets-digest"><span>3.3.9</span> <code>config.assets.digest</code></a></h4><p>Habilita el uso de huellas SHA256 en los nombres de los activos. Establecido en <code>true</code> por defecto.</p><h4 id="config-assets-debug"><a class="anchorlink" href="#config-assets-debug"><span>3.3.10</span> <code>config.assets.debug</code></a></h4><p>Deshabilita la concatenación y compresión de activos. Establecido en <code>true</code> por defecto en <code>development.rb</code>.</p><h4 id="config-assets-version"><a class="anchorlink" href="#config-assets-version"><span>3.3.11</span> <code>config.assets.version</code></a></h4><p>Es una cadena de opción que se usa en la generación de hash SHA256. Esto se puede cambiar para forzar que todos los archivos se recompilen.</p><h4 id="config-assets-compile"><a class="anchorlink" href="#config-assets-compile"><span>3.3.12</span> <code>config.assets.compile</code></a></h4><p>Es un booleano que se puede usar para activar la compilación en vivo de Sprockets en producción.</p><h4 id="config-assets-logger"><a class="anchorlink" href="#config-assets-logger"><span>3.3.13</span> <code>config.assets.logger</code></a></h4><p>Acepta un registrador que se ajusta a la interfaz de Log4r o la clase <code>Logger</code> de Ruby por defecto. Por defecto es el mismo configurado en <code>config.logger</code>. Establecer <code>config.assets.logger</code> en <code>false</code> desactivará el registro de activos servidos.</p><h4 id="config-assets-quiet"><a class="anchorlink" href="#config-assets-quiet"><span>3.3.14</span> <code>config.assets.quiet</code></a></h4><p>Deshabilita el registro de solicitudes de activos. Establecido en <code>true</code> por defecto en <code>development.rb</code>.</p><h3 id="configuración-de-generadores"><a class="anchorlink" href="#configuración-de-generadores"><span>3.4</span> Configuración de Generadores</a></h3><p>Rails le permite alterar qué generadores se usan con el método <code>config.generators</code>. Este método toma un bloque:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">generators</span> <span class="k">do</span> <span class="o">|</span><span class="n">g</span><span class="o">|</span>
<span class="n">g</span><span class="p">.</span><span class="nf">orm</span> <span class="ss">:active_record</span>
<span class="n">g</span><span class="p">.</span><span class="nf">test_framework</span> <span class="ss">:test_unit</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.generators do |g|
g.orm :active_record
g.test_framework :test_unit
end
">Copy</button>
</div>
<p>El conjunto completo de métodos que se pueden usar en este bloque son los siguientes:</p>
<ul>
<li><code>force_plural</code> permite nombres de modelo pluralizados. Por defecto es <code>false</code>.</li>
<li><code>helper</code> define si se deben generar o no ayudantes. Por defecto es <code>true</code>.</li>
<li><code>integration_tool</code> define qué herramienta de integración usar para generar pruebas de integración. Por defecto es <code>:test_unit</code>.</li>
<li><code>system_tests</code> define qué herramienta de integración usar para generar pruebas de sistema. Por defecto es <code>:test_unit</code>.</li>
<li><code>orm</code> define qué orm usar. Por defecto es <code>false</code> y usará Active Record por defecto.</li>
<li><code>resource_controller</code> define qué generador usar para generar un controlador al usar <code>bin/rails generate resource</code>. Por defecto es <code>:controller</code>.</li>
<li><code>resource_route</code> define si se debe generar o no una definición de ruta de recurso. Por defecto es <code>true</code>.</li>
<li><code>scaffold_controller</code> diferente de <code>resource_controller</code>, define qué generador usar para generar un controlador <em>scaffolded</em> al usar <code>bin/rails generate scaffold</code>. Por defecto es <code>:scaffold_controller</code>.</li>
<li><code>test_framework</code> define qué marco de prueba usar. Por defecto es <code>false</code> y usará minitest por defecto.</li>
<li><code>template_engine</code> define qué motor de plantillas usar, como ERB o Haml. Por defecto es <code>:erb</code>.</li>
<li><code>apply_rubocop_autocorrect_after_generate!</code> aplica la función de autocorrección de RuboCop después de que se ejecuten los generadores de Rails.</li>
</ul>
<h3 id="configuración-de-middleware"><a class="anchorlink" href="#configuración-de-middleware"><span>3.5</span> Configuración de Middleware</a></h3><p>Cada aplicación Rails viene con un conjunto estándar de middleware que utiliza en este orden en el entorno de desarrollo:</p><h4 id="actiondispatch-hostauthorization"><a class="anchorlink" href="#actiondispatch-hostauthorization"><span>3.5.1</span> <code>ActionDispatch::HostAuthorization</code></a></h4><p>Previene contra ataques de reencaminamiento de DNS y otros ataques de encabezado <code>Host</code>.
Se incluye en el entorno de desarrollo por defecto con la siguiente configuración:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">hosts</span> <span class="o">=</span> <span class="p">[</span>
<span class="no">IPAddr</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"0.0.0.0/0"</span><span class="p">),</span> <span class="c1"># Todas las direcciones IPv4.</span>
<span class="no">IPAddr</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"::/0"</span><span class="p">),</span> <span class="c1"># Todas las direcciones IPv6.</span>
<span class="s2">"localhost"</span><span class="p">,</span> <span class="c1"># El dominio reservado localhost.</span>
<span class="no">ENV</span><span class="p">[</span><span class="s2">"RAILS_DEVELOPMENT_HOSTS"</span><span class="p">]</span> <span class="c1"># Hosts adicionales separados por comas para desarrollo.</span>
<span class="p">]</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="Rails.application.config.hosts = [
IPAddr.new("0.0.0.0/0"), # Todas las direcciones IPv4.
IPAddr.new("::/0"), # Todas las direcciones IPv6.
"localhost", # El dominio reservado localhost.
ENV["RAILS_DEVELOPMENT_HOSTS"] # Hosts adicionales separados por comas para desarrollo.
]
">Copy</button>
</div>
<p>En otros entornos <code>Rails.application.config.hosts</code> está vacío y no se realizarán
comprobaciones del encabezado <code>Host</code>. Si desea protegerse contra ataques de encabezado
en producción, debe permitir manualmente los hosts permitidos con:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">hosts</span> <span class="o"><<</span> <span class="s2">"product.com"</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="Rails.application.config.hosts << "product.com"
">Copy</button>
</div>
<p>El host de una solicitud se verifica contra las entradas <code>hosts</code> con el operador de caso (<code>#===</code>), lo que permite que <code>hosts</code> admita entradas de tipo <code>Regexp</code>, <code>Proc</code> y <code>IPAddr</code> por nombrar algunos. Aquí hay un ejemplo con una expresión regular.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="c1"># Permitir solicitudes de subdominios como `www.product.com` y</span>
<span class="c1"># `beta1.product.com`.</span>
<span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">hosts</span> <span class="o"><<</span> <span class="sr">/.*\.product\.com/</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="# Permitir solicitudes de subdominios como `www.product.com` y
# `beta1.product.com`.
Rails.application.config.hosts << /.*\.product\.com/
">Copy</button>
</div>
<p>La expresión regular proporcionada se envolverá con ambos anclajes (<code>\A</code> y <code>\z</code>) por lo que debe coincidir con todo el nombre de host. <code>/product.com/</code>, por ejemplo, una vez anclado, fallaría al coincidir con <code>www.product.com</code>.</p><p>Se admite un caso especial que le permite permitir todos los subdominios:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="c1"># Permitir solicitudes de subdominios como `www.product.com` y</span>
<span class="c1"># `beta1.product.com`.</span>
<span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">hosts</span> <span class="o"><<</span> <span class="s2">".product.com"</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="# Permitir solicitudes de subdominios como `www.product.com` y
# `beta1.product.com`.
Rails.application.config.hosts << ".product.com"
">Copy</button>
</div>
<p>Puede excluir ciertas solicitudes de las comprobaciones de Autorización de Host configurando
<code>config.host_authorization.exclude</code>:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="c1"># Excluir solicitudes para la ruta /healthcheck/ de la comprobación de hosts</span>
<span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">host_authorization</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">exclude: </span><span class="o">-></span><span class="p">(</span><span class="n">request</span><span class="p">)</span> <span class="p">{</span> <span class="n">request</span><span class="p">.</span><span class="nf">path</span><span class="p">.</span><span class="nf">include?</span><span class="p">(</span><span class="s1">'healthcheck'</span><span class="p">)</span> <span class="p">}</span>
<span class="p">}</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="# Excluir solicitudes para la ruta /healthcheck/ de la comprobación de hosts
Rails.application.config.host_authorization = {
exclude: ->(request) { request.path.include?('healthcheck') }
}
">Copy</button>
</div>
<p>Cuando una solicitud llega a un host no autorizado, se ejecutará una aplicación Rack predeterminada
y responderá con <code>403 Forbidden</code>. Esto se puede personalizar configurando
<code>config.host_authorization.response_app</code>. Por ejemplo:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="no">Rails</span><span class="p">.</span><span class="nf">application</span><span class="p">.</span><span class="nf">config</span><span class="p">.</span><span class="nf">host_authorization</span> <span class="o">=</span> <span class="p">{</span>
<span class="ss">response_app: </span><span class="o">-></span> <span class="n">env</span> <span class="k">do</span>
<span class="p">[</span><span class="mi">400</span><span class="p">,</span> <span class="p">{</span> <span class="s2">"Content-Type"</span> <span class="o">=></span> <span class="s2">"text/plain"</span> <span class="p">},</span> <span class="p">[</span><span class="s2">"Bad Request"</span><span class="p">]]</span>
<span class="k">end</span>
<span class="p">}</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="Rails.application.config.host_authorization = {
response_app: -> env do
[400, { "Content-Type" => "text/plain" }, ["Bad Request"]]
end
}
">Copy</button>
</div>
<h4 id="actiondispatch-servertiming"><a class="anchorlink" href="#actiondispatch-servertiming"><span>3.5.2</span> <code>ActionDispatch::ServerTiming</code></a></h4><p>Agrega el encabezado <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing"><code>Server-Timing</code></a> a la respuesta, que incluye métricas de
rendimiento del servidor. Estos datos se pueden ver inspeccionando la respuesta en
el panel de Red de las Herramientas de Desarrollador del navegador. La mayoría de los navegadores
proporcionan una pestaña de Tiempo que visualiza los datos.</p><h4 id="actiondispatch-ssl"><a class="anchorlink" href="#actiondispatch-ssl"><span>3.5.3</span> <code>ActionDispatch::SSL</code></a></h4><p>Fuerza que cada solicitud se sirva utilizando HTTPS. Habilitado si <code>config.force_ssl</code> está establecido en <code>true</code>. Las opciones pasadas a esto pueden configurarse estableciendo <code>config.ssl_options</code>.</p><h4 id="actiondispatch-static"><a class="anchorlink" href="#actiondispatch-static"><span>3.5.4</span> <code>ActionDispatch::Static</code></a></h4><p>Se utiliza para servir activos estáticos. Deshabilitado si <code>config.public_file_server.enabled</code> es <code>false</code>. Establezca <code>config.public_file_server.index_name</code> si necesita servir un archivo de índice de directorio estático que no se llame <code>index</code>. Por ejemplo, para servir <code>main.html</code> en lugar de <code>index.html</code> para solicitudes de directorio, establezca <code>config.public_file_server.index_name</code> en <code>"main"</code>.</p><h4 id="actiondispatch-executor"><a class="anchorlink" href="#actiondispatch-executor"><span>3.5.5</span> <code>ActionDispatch::Executor</code></a></h4><p>Permite la recarga segura de código en hilos. Deshabilitado si <code>config.allow_concurrency</code> es <code>false</code>, lo que hace que <code>Rack::Lock</code> se cargue. <code>Rack::Lock</code> envuelve la aplicación en un mutex para que solo pueda ser llamada por un solo hilo a la vez.</p><h4 id="activesupport-cache-strategy-localcache"><a class="anchorlink" href="#activesupport-cache-strategy-localcache"><span>3.5.6</span> <code>ActiveSupport::Cache::Strategy::LocalCache</code></a></h4><p>Sirve como una caché básica respaldada por memoria. Esta caché no es segura para hilos y está destinada solo a servir como una caché de memoria temporal para un solo hilo.</p><h4 id="rack-runtime"><a class="anchorlink" href="#rack-runtime"><span>3.5.7</span> <code>Rack::Runtime</code></a></h4><p>Establece un encabezado <code>X-Runtime</code>, que contiene el tiempo (en segundos) tomado para ejecutar la solicitud.</p><h4 id="rails-rack-logger"><a class="anchorlink" href="#rails-rack-logger"><span>3.5.8</span> <code>Rails::Rack::Logger</code></a></h4><p>Notifica a los registros que la solicitud ha comenzado. Después de que la solicitud se completa, vacía todos los registros.</p><h4 id="actiondispatch-showexceptions"><a class="anchorlink" href="#actiondispatch-showexceptions"><span>3.5.9</span> <code>ActionDispatch::ShowExceptions</code></a></h4><p>Rescata cualquier excepción devuelta por la aplicación y muestra bonitas páginas de excepción si la solicitud es local o si <code>config.consider_all_requests_local</code> está establecido en <code>true</code>. Si <code>config.action_dispatch.show_exceptions</code> está establecido en <code>:none</code>, las excepciones se lanzarán independientemente.</p><h4 id="actiondispatch-requestid"><a class="anchorlink" href="#actiondispatch-requestid"><span>3.5.10</span> <code>ActionDispatch::RequestId</code></a></h4><p>Hace que un encabezado X-Request-Id único esté disponible para la respuesta y habilita el método <code>ActionDispatch::Request#uuid</code>. Configurable con <code>config.action_dispatch.request_id_header</code>.</p><h4 id="actiondispatch-remoteip"><a class="anchorlink" href="#actiondispatch-remoteip"><span>3.5.11</span> <code>ActionDispatch::RemoteIp</code></a></h4><p>Verifica ataques de suplantación de IP y obtiene un <code>client_ip</code> válido de los encabezados de la solicitud. Configurable con las opciones <code>config.action_dispatch.ip_spoofing_check</code> y <code>config.action_dispatch.trusted_proxies</code>.</p><h4 id="rack-sendfile"><a class="anchorlink" href="#rack-sendfile"><span>3.5.12</span> <code>Rack::Sendfile</code></a></h4><p>Intercepta respuestas cuyo cuerpo se está sirviendo desde un archivo y lo reemplaza con un encabezado X-Sendfile específico del servidor. Configurable con <code>config.action_dispatch.x_sendfile_header</code>.</p><h4 id="actiondispatch-callbacks"><a class="anchorlink" href="#actiondispatch-callbacks"><span>3.5.13</span> <code>ActionDispatch::Callbacks</code></a></h4><p>Ejecuta las devoluciones de llamada de preparación antes de servir la solicitud.</p><h4 id="actiondispatch-cookies"><a class="anchorlink" href="#actiondispatch-cookies"><span>3.5.14</span> <code>ActionDispatch::Cookies</code></a></h4><p>Establece cookies para la solicitud.</p><h4 id="actiondispatch-session-cookiestore"><a class="anchorlink" href="#actiondispatch-session-cookiestore"><span>3.5.15</span> <code>ActionDispatch::Session::CookieStore</code></a></h4><p>Es responsable de almacenar la sesión en cookies. Se puede usar un middleware alternativo para esto cambiando <a href="#config-session-store"><code>config.session_store</code></a>.</p><h4 id="actiondispatch-flash"><a class="anchorlink" href="#actiondispatch-flash"><span>3.5.16</span> <code>ActionDispatch::Flash</code></a></h4><p>Configura las claves <code>flash</code>. Solo disponible si <a href="#config-session-store"><code>config.session_store</code></a> está establecido en un valor.</p><h4 id="rack-methodoverride"><a class="anchorlink" href="#rack-methodoverride"><span>3.5.17</span> <code>Rack::MethodOverride</code></a></h4><p>Permite que el método se sobrescriba si <code>params[:_method]</code> está establecido. Este es el middleware que admite los tipos de método HTTP PATCH, PUT y DELETE.</p><h4 id="rack-head"><a class="anchorlink" href="#rack-head"><span>3.5.18</span> <code>Rack::Head</code></a></h4><p>Devuelve un cuerpo vacío para todas las solicitudes HEAD. Deja todas las demás solicitudes sin cambios.</p><h4 id="agregando-middleware-personalizado"><a class="anchorlink" href="#agregando-middleware-personalizado"><span>3.5.19</span> Agregando Middleware Personalizado</a></h4><p>Además de estos middleware habituales, puede agregar el suyo propio utilizando el método <code>config.middleware.use</code>:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">use</span> <span class="no">Magical</span><span class="o">::</span><span class="no">Unicorns</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.use Magical::Unicorns
">Copy</button>
</div>
<p>Esto colocará el middleware <code>Magical::Unicorns</code> al final de la pila. Puede usar <code>insert_before</code> si desea agregar un middleware antes de otro.</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">insert_before</span> <span class="no">Rack</span><span class="o">::</span><span class="no">Head</span><span class="p">,</span> <span class="no">Magical</span><span class="o">::</span><span class="no">Unicorns</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.insert_before Rack::Head, Magical::Unicorns
">Copy</button>
</div>
<p>O puede insertar un middleware en una posición exacta utilizando índices. Por ejemplo, si desea insertar el middleware <code>Magical::Unicorns</code> en la parte superior de la pila, puede hacerlo, de la siguiente manera:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">insert_before</span> <span class="mi">0</span><span class="p">,</span> <span class="no">Magical</span><span class="o">::</span><span class="no">Unicorns</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.insert_before 0, Magical::Unicorns
">Copy</button>
</div>
<p>También hay <code>insert_after</code> que insertará un middleware después de otro:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">insert_after</span> <span class="no">Rack</span><span class="o">::</span><span class="no">Head</span><span class="p">,</span> <span class="no">Magical</span><span class="o">::</span><span class="no">Unicorns</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.insert_after Rack::Head, Magical::Unicorns
">Copy</button>
</div>
<p>Los middleware también se pueden intercambiar completamente y reemplazar por otros:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">swap</span> <span class="no">ActionController</span><span class="o">::</span><span class="no">Failsafe</span><span class="p">,</span> <span class="no">Lifo</span><span class="o">::</span><span class="no">Failsafe</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.swap ActionController::Failsafe, Lifo::Failsafe
">Copy</button>
</div>
<p>Los middleware se pueden mover de un lugar a otro:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">move_before</span> <span class="no">ActionDispatch</span><span class="o">::</span><span class="no">Flash</span><span class="p">,</span> <span class="no">Magical</span><span class="o">::</span><span class="no">Unicorns</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
">Copy</button>
</div>
<p>Esto moverá el middleware <code>Magical::Unicorns</code> antes de
<code>ActionDispatch::Flash</code>. También puede moverlo después:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">move_after</span> <span class="no">ActionDispatch</span><span class="o">::</span><span class="no">Flash</span><span class="p">,</span> <span class="no">Magical</span><span class="o">::</span><span class="no">Unicorns</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
">Copy</button>
</div>
<p>También se pueden eliminar completamente de la pila:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="n">config</span><span class="p">.</span><span class="nf">middleware</span><span class="p">.</span><span class="nf">delete</span> <span class="no">Rack</span><span class="o">::</span><span class="no">MethodOverride</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="config.middleware.delete Rack::MethodOverride
">Copy</button>
</div>
<h3 id="configuración-de-i18n"><a class="anchorlink" href="#configuración-de-i18n"><span>3.6</span> Configuración de i18n</a></h3><p>Todas estas opciones de configuración se delegan a la biblioteca <code>I18n</code>.</p><h4 id="config-i18n-available-locales"><a class="anchorlink" href="#config-i18n-available-locales"><span>3.6.1</span> <code>config.i18n.available_locales</code></a></h4><p>Define los locales disponibles permitidos para la aplicación. Por defecto son todas las claves de locales encontradas en los archivos de locales, usualmente solo <code>:en</code> en una nueva aplicación.</p><h4 id="config-i18n-default-locale"><a class="anchorlink" href="#config-i18n-default-locale"><span>3.6.2</span> <code>config.i18n.default_locale</code></a></h4><p>Establece el locale predeterminado de una aplicación utilizada para i18n. Por defecto es <code>:en</code>.</p><h4 id="config-i18n-enforce-available-locales"><a class="anchorlink" href="#config-i18n-enforce-available-locales"><span>3.6.3</span> <code>config.i18n.enforce_available_locales</code></a></h4><p>Asegura que todos los locales pasados a través de i18n deben ser declarados en la lista <code>available_locales</code>, lanzando una excepción <code>I18n::InvalidLocale</code> al establecer un locale no disponible. Por defecto es <code>true</code>. Se recomienda no desactivar esta opción a menos que sea estrictamente necesario, ya que funciona como una medida de seguridad contra el establecimiento de cualquier locale no válido a partir de la entrada del usuario.</p><h4 id="config-i18n-load-path"><a class="anchorlink" href="#config-i18n-load-path"><span>3.6.4</span> <code>config.i18n.load_path</code></a></h4><p>Establece la ruta que Rails usa para buscar archivos de locales. Por defecto es <code>config/locales/**/*.{yml,rb}</code>.</p><h4 id="config-i18n-raise-on-missing-translations"><a class="anchorlink" href="#config-i18n-raise-on-missing-translations"><span>3.6.5</span> <code>config.i18n.raise_on_missing_translations</code></a></h4><p>Determina si se debe lanzar un error por traducciones faltantes. Esto por defecto es <code>false</code>.</p><h4 id="config-i18n-fallbacks"><a class="anchorlink" href="#config-i18n-fallbacks"><span>3.6.6</span> <code>config.i18n.fallbacks</code></a></h4><p>Establece el comportamiento de reserva para traducciones faltantes. Aquí hay 3 ejemplos de uso para esta opción:</p>
<ul>
<li>Puede establecer la opción en <code>true</code> para usar el locale predeterminado como reserva, así:</li>
</ul>
<div class="interstitial code">
<pre><code class="highlight ruby"> <span class="n">config</span><span class="p">.</span><span class="nf">i18n</span><span class="p">.</span><span class="nf">fallbacks</span> <span class="o">=</span> <span class="kp">true</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text=" config.i18n.fallbacks = true
">Copy</button>
</div>
<ul>
<li>O puede establecer un array de locales como reserva, así:</li>
</ul>
<div class="interstitial code">
<pre><code class="highlight ruby"> <span class="n">config</span><span class="p">.</span><span class="nf">i18n</span><span class="p">.</span><span class="nf">fallbacks</span> <span class="o">=</span> <span class="p">[</span><span class="ss">:tr</span><span class="p">,</span> <span class="ss">:en</span><span class="p">]</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text=" config.i18n.fallbacks = [:tr, :en]
">Copy</button>
</div>
<ul>
<li>O puede establecer diferentes reservas para locales individualmente. Por ejemplo, si desea usar <code>:tr</code> para <code>:az</code> y <code>:de</code>, <code>:en</code> para <code>:da</code> como reservas, puede hacerlo, así:</li>
</ul>
<div class="interstitial code">
<pre><code class="highlight ruby"> <span class="n">config</span><span class="p">.</span><span class="nf">i18n</span><span class="p">.</span><span class="nf">fallbacks</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">az: :tr</span><span class="p">,</span> <span class="ss">da: </span><span class="p">[</span><span class="ss">:de</span><span class="p">,</span> <span class="ss">:en</span><span class="p">]</span> <span class="p">}</span>
<span class="c1">#o</span>
<span class="n">config</span><span class="p">.</span><span class="nf">i18n</span><span class="p">.</span><span class="nf">fallbacks</span><span class="p">.</span><span class="nf">map</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">az: :tr</span><span class="p">,</span> <span class="ss">da: </span><span class="p">[</span><span class="ss">:de</span><span class="p">,</span> <span class="ss">:en</span><span class="p">]</span> <span class="p">}</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text=" config.i18n.fallbacks = { az: :tr, da: [:de, :en] }
#o
config.i18n.fallbacks.map = { az: :tr, da: [:de, :en] }
">Copy</button>
</div>
<h3 id="configuración-de-active-model"><a class="anchorlink" href="#configuración-de-active-model"><span>3.7</span> Configuración de Active Model</a></h3><h4 id="config-active-model-i18n-customize-full-message"><a class="anchorlink" href="#config-active-model-i18n-customize-full-message"><span>3.7.1</span> <code>config.active_model.i18n_customize_full_message</code></a></h4><p>Controla si el formato de <a href="https://edgeapi.rubyonrails.org/classes/ActiveModel/Error.html#method-i-full_message"><code>Error#full_message</code></a> puede ser sobrescrito en un archivo de locales i18n. Por defecto es <code>false</code>.</p><p>Cuando se establece en <code>true</code>, <code>full_message</code> buscará un formato a nivel de atributo y modelo en los archivos de locales. El formato predeterminado es <code>"%{attribute} %{message}"</code>, donde <code>attribute</code> es el nombre del atributo y <code>message</code> es el mensaje específico de validación. El siguiente ejemplo sobrescribe el formato para todos los atributos de <code>Person</code>, así como el formato para un atributo específico de <code>Person</code> (<code>age</code>).</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="k">class</span> <span class="nc">Person</span>
<span class="kp">include</span> <span class="no">ActiveModel</span><span class="o">::</span><span class="no">Validations</span>
<span class="nb">attr_accessor</span> <span class="ss">:name</span><span class="p">,</span> <span class="ss">:age</span>
<span class="n">validates</span> <span class="ss">:name</span><span class="p">,</span> <span class="ss">:age</span><span class="p">,</span> <span class="ss">presence: </span><span class="kp">true</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="class Person
include ActiveModel::Validations
attr_accessor :name, :age
validates :name, :age, presence: true
end
">Copy</button>
</div>
<div class="interstitial code">
<pre><code class="highlight yml"><span class="na">en</span><span class="pi">:</span>
<span class="na">activemodel</span><span class="pi">:</span> <span class="c1"># o activerecord:</span>
<span class="na">errors</span><span class="pi">:</span>
<span class="na">models</span><span class="pi">:</span>
<span class="na">person</span><span class="pi">:</span>
<span class="c1"># Sobrescribir el formato para todos los atributos de Person:</span>
<span class="na">format</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Invalid</span><span class="nv"> </span><span class="s">%{attribute}</span><span class="nv"> </span><span class="s">(%{message})"</span>
<span class="na">attributes</span><span class="pi">:</span>
<span class="na">age</span><span class="pi">:</span>
<span class="c1"># Sobrescribir el formato para el atributo age:</span>
<span class="na">format</span><span class="pi">:</span> <span class="s2">"</span><span class="s">%{message}"</span>
<span class="na">blank</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Please</span><span class="nv"> </span><span class="s">fill</span><span class="nv"> </span><span class="s">in</span><span class="nv"> </span><span class="s">your</span><span class="nv"> </span><span class="s">%{attribute}"</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="en:
activemodel: # o activerecord:
errors:
models:
person:
# Sobrescribir el formato para todos los atributos de Person:
format: "Invalid %{attribute} (%{message})"
attributes:
age:
# Sobrescribir el formato para el atributo age:
format: "%{message}"
blank: "Please fill in your %{attribute}"
">Copy</button>
</div>
<div class="interstitial code">
<pre><code class="highlight irb"><span class="gp">irb></span><span class="w"> </span><span class="n">person</span> <span class="o">=</span> <span class="no">Person</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">tap</span><span class="p">(</span><span class="o">&</span><span class="ss">:valid?</span><span class="p">)</span>
<span class="err">
</span><span class="gp">irb></span><span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="nf">errors</span><span class="p">.</span><span class="nf">full_messages</span>
<span class="p">=></span> <span class="p">[</span>
<span class="s2">"Invalid Name (can't be blank)"</span><span class="p">,</span>
<span class="s2">"Please fill in your Age"</span>
<span class="p">]</span>
<span class="gp">irb></span><span class="w"> </span><span class="n">person</span><span class="p">.</span><span class="nf">errors</span><span class="p">.</span><span class="nf">messages</span>
<span class="p">=></span> <span class="p">{</span>
<span class="ss">:name</span> <span class="o">=></span> <span class="p">[</span><span class="s2">"can't be blank"</span><span class="p">],</span>
<span class="ss">:age</span> <span class="o">=></span> <span class="p">[</span><span class="s2">"Please fill in your Age"</span><span class="p">]</span>
<span class="p">}</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="person = Person.new.tap(&:valid?)
person.errors.full_messages
person.errors.messages
">Copy</button>
</div>
<h3 id="configuración-de-active-record"><a class="anchorlink" href="#configuración-de-active-record"><span>3.8</span> Configuración de Active Record</a></h3><p><code>config.active_record</code> incluye una variedad de opciones de configuración:</p><h4 id="config-active-record-logger"><a class="anchorlink" href="#config-active-record-logger"><span>3.8.1</span> <code>config.active_record.logger</code></a></h4><p>Acepta un logger que cumpla con la interfaz de Log4r o la clase predeterminada Ruby Logger, que luego se pasa a cualquier nueva conexión de base de datos realizada. Puedes recuperar este logger llamando a <code>logger</code> en una clase de modelo de Active Record o en una instancia de modelo de Active Record. Establecer en <code>nil</code> para deshabilitar el registro.</p><h4 id="config-active-record-primary-key-prefix-type"><a class="anchorlink" href="#config-active-record-primary-key-prefix-type"><span>3.8.2</span> <code>config.active_record.primary_key_prefix_type</code></a></h4><p>Te permite ajustar el nombre de las columnas de clave primaria. Por defecto, Rails asume que las columnas de clave primaria se llaman <code>id</code> (y esta opción de configuración no necesita establecerse). Hay dos opciones más:</p>
<ul>
<li><code>:table_name</code> haría que la clave primaria para la clase Customer sea <code>customerid</code>.</li>
<li><code>:table_name_with_underscore</code> haría que la clave primaria para la clase Customer sea <code>customer_id</code>.</li>
</ul>
<h4 id="config-active-record-table-name-prefix"><a class="anchorlink" href="#config-active-record-table-name-prefix"><span>3.8.3</span> <code>config.active_record.table_name_prefix</code></a></h4><p>Te permite establecer una cadena global que se antepone a los nombres de las tablas. Si estableces esto en <code>northwest_</code>, entonces la clase Customer buscará <code>northwest_customers</code> como su tabla. El valor predeterminado es una cadena vacía.</p><h4 id="config-active-record-table-name-suffix"><a class="anchorlink" href="#config-active-record-table-name-suffix"><span>3.8.4</span> <code>config.active_record.table_name_suffix</code></a></h4><p>Te permite establecer una cadena global que se apende a los nombres de las tablas. Si estableces esto en <code>_northwest</code>, entonces la clase Customer buscará <code>customers_northwest</code> como su tabla. El valor predeterminado es una cadena vacía.</p><h4 id="config-active-record-schema-migrations-table-name"><a class="anchorlink" href="#config-active-record-schema-migrations-table-name"><span>3.8.5</span> <code>config.active_record.schema_migrations_table_name</code></a></h4><p>Te permite establecer una cadena que se usará como el nombre de la tabla de migraciones de esquema.</p><h4 id="config-active-record-internal-metadata-table-name"><a class="anchorlink" href="#config-active-record-internal-metadata-table-name"><span>3.8.6</span> <code>config.active_record.internal_metadata_table_name</code></a></h4><p>Te permite establecer una cadena que se usará como el nombre de la tabla de metadatos internos.</p><h4 id="config-active-record-protected-environments"><a class="anchorlink" href="#config-active-record-protected-environments"><span>3.8.7</span> <code>config.active_record.protected_environments</code></a></h4><p>Te permite establecer una matriz de nombres de entornos donde las acciones destructivas deben estar prohibidas.</p><h4 id="config-active-record-pluralize-table-names"><a class="anchorlink" href="#config-active-record-pluralize-table-names"><span>3.8.8</span> <code>config.active_record.pluralize_table_names</code></a></h4><p>Especifica si Rails buscará nombres de tabla singulares o plurales en la base de datos. Si se establece en <code>true</code> (el valor predeterminado), entonces la clase Customer usará la tabla <code>customers</code>. Si se establece en <code>false</code>, entonces la clase Customer usará la tabla <code>customer</code>.</p><h4 id="config-active-record-default-timezone"><a class="anchorlink" href="#config-active-record-default-timezone"><span>3.8.9</span> <code>config.active_record.default_timezone</code></a></h4><p>Determina si usar <code>Time.local</code> (si se establece en <code>:local</code>) o <code>Time.utc</code> (si se establece en <code>:utc</code>) al extraer fechas y horas de la base de datos. El valor predeterminado es <code>:utc</code>.</p><h4 id="config-active-record-schema-format"><a class="anchorlink" href="#config-active-record-schema-format"><span>3.8.10</span> <code>config.active_record.schema_format</code></a></h4><p>Controla el formato para volcar el esquema de la base de datos a un archivo. Las opciones son <code>:ruby</code> (el valor predeterminado) para una versión independiente de la base de datos que depende de las migraciones, o <code>:sql</code> para un conjunto de declaraciones SQL (potencialmente dependientes de la base de datos).</p><h4 id="config-active-record-error-on-ignored-order"><a class="anchorlink" href="#config-active-record-error-on-ignored-order"><span>3.8.11</span> <code>config.active_record.error_on_ignored_order</code></a></h4><p>Especifica si se debe generar un error si el orden de una consulta se ignora durante una consulta por lotes. Las opciones son <code>true</code> (generar error) o <code>false</code> (advertir). El valor predeterminado es <code>false</code>.</p><h4 id="config-active-record-timestamped-migrations"><a class="anchorlink" href="#config-active-record-timestamped-migrations"><span>3.8.12</span> <code>config.active_record.timestamped_migrations</code></a></h4><p>Controla si las migraciones están numeradas con enteros en serie o con marcas de tiempo. El valor predeterminado es <code>true</code>, para usar marcas de tiempo, que se prefieren si hay varios desarrolladores trabajando en la misma aplicación.</p><h4 id="config-active-record-automatically-invert-plural-associations"><a class="anchorlink" href="#config-active-record-automatically-invert-plural-associations"><span>3.8.13</span> <code>config.active_record.automatically_invert_plural_associations</code></a></h4><p>Controla si Active Record buscará automáticamente relaciones inversas con un nombre pluralizado.</p><p>Ejemplo:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="k">class</span> <span class="nc">Post</span> <span class="o"><</span> <span class="no">ApplicationRecord</span>
<span class="n">has_many</span> <span class="ss">:comments</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">Comment</span> <span class="o"><</span> <span class="no">ApplicationRecord</span>
<span class="n">belongs_to</span> <span class="ss">:post</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="class Post < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :post
end
">Copy</button>
</div>
<p>En el caso anterior, Active Record solía buscar solo una asociación <code>:comment</code> (singular) en <code>Post</code>, y no la encontraba.</p><p>Con esta opción habilitada, también buscará una asociación <code>:comments</code>. En la gran mayoría de los casos, tener la asociación inversa descubierta es beneficioso ya que puede prevenir algunas consultas inútiles, pero puede causar problemas de compatibilidad hacia atrás con código heredado que no lo espera.</p><p>Este comportamiento se puede deshabilitar por modelo:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="k">class</span> <span class="nc">Comment</span> <span class="o"><</span> <span class="no">ApplicationRecord</span>
<span class="nb">self</span><span class="p">.</span><span class="nf">automatically_invert_plural_associations</span> <span class="o">=</span> <span class="kp">false</span>
<span class="n">belongs_to</span> <span class="ss">:post</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="class Comment < ApplicationRecord
self.automatically_invert_plural_associations = false
belongs_to :post
end
">Copy</button>
</div>
<p>Y por asociación:</p><div class="interstitial code">
<pre><code class="highlight ruby"><span class="k">class</span> <span class="nc">Comment</span> <span class="o"><</span> <span class="no">ApplicationRecord</span>
<span class="nb">self</span><span class="p">.</span><span class="nf">automatically_invert_plural_associations</span> <span class="o">=</span> <span class="kp">true</span>
<span class="n">belongs_to</span> <span class="ss">:post</span><span class="p">,</span> <span class="ss">inverse_of: </span><span class="kp">nil</span>
<span class="k">end</span>
</code></pre>
<button class="clipboard-button" data-clipboard-text="class Comment < ApplicationRecord
self.automatically_invert_plural_associations = true
belongs_to :post, inverse_of: nil
end
">Copy</button>
</div>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>false</code></td>
</tr>
</tbody></table>
<h4 id="config-active-record-validate-migration-timestamps"><a class="anchorlink" href="#config-active-record-validate-migration-timestamps"><span>3.8.14</span> <code>config.active_record.validate_migration_timestamps</code></a></h4><p>Controla si se deben validar las marcas de tiempo de las migraciones. Cuando se establece, se generará un error si el prefijo de marca de tiempo para una migración es más de un día antes de la marca de tiempo asociada con la hora actual. Esto se hace para prevenir el antedatado de archivos de migración, lo que puede afectar la generación de migraciones y otros comandos de migración. <code>config.active_record.timestamped_migrations</code> debe estar establecido en <code>true</code>.</p><p>El valor predeterminado depende de la versión de destino de <code>config.load_defaults</code>:</p>
<table><thead>
<tr>
<th>A partir de la versión</th>
<th>El valor predeterminado es</th>
</tr>
</thead><tbody>
<tr>
<td>(original)</td>
<td><code>false</code></td>
</tr>
<tr>
<td>7.2</td>
<td><code>true</code></td>
</tr>
</tbody></table>
<h4 id="config-active-record-db-warnings-action"><a class="anchorlink" href="#config-active-record-db-warnings-action"><span>3.8.15</span> <code>config.active_record.db_warnings_action</code></a></h4><p>Controla la acción a tomar cuando una consulta SQL produce una advertencia. Las siguientes opciones están disponibles:</p>