Sampai sekarang saya hanya menggunakan database.yml dengan setiap parameter dipanggil secara eksplisit, dalam file di bawah ini menggunakan beberapa karakter yang saya tidak mengerti. Apa arti setiap baris dan simbol (&, *, <<), bagaimana cara saya membaca file ini?
development: &default
adapter: postgresql
database: dev_development
test: &test
<<: *default
database: test_test
cucumber:
<<: *test
production:
<<: *default
database: test_production
ruby-on-rails
database-connection
yaml
alias
cross-reference
OpenCoderX
sumber
sumber
Jawaban:
The
&
tanda alias untuk node (dalam contoh&default
alias node pembangunan sebagai "default") dan*
referensi node alias dengan nama "default". The<<:
menyisipkan isi dari simpul tersebut.Izinkan saya mengutip spec YAML di sini:
Jadi, bagian dari contoh Anda
sebenarnya berkembang menjadi
dan pada saat yang sama membuat simpul "test" juga tersedia di bawah alias "test".
Lihatlah spesifikasi YAML - 2.2 Struktur untuk perincian lebih lanjut (atau jika Anda bahkan perlu dokumen moar ++: 3.2.2.2. Jangkar dan Alias )
sumber
<<: *default
ditimpa. Dengan YAML yang dihasilkannya{"development"=>{"adapter"=>"postgresql", "database"=>"dev_development"}, "test"=>{"adapter"=>"postgresql", "database"=>"test_test"}}
&default
berarti Anda memberi label rangkaian atribut ini dengan beberapa nama untuk digunakan nanti<<: *default
berarti Anda memasukkan semua atribut dari grup yang berlabel defaultsumber
Ini mewakili referensi simpul (*) dan gabungan array asosiatif (<<) yang merujuk ke sebuah simpul yang berlabel jangkar (&) - wikipedia
Cobalah sendiri secara online .
sumber
Mereka adalah cara untuk referensi lingkungan tanpa harus mengulangi pengaturan yang sama berulang-ulang (KERING itu).
&test
membuat referensi ke pengaturan spesifik tersebut.<<: *default
mengatakan gunakan pengaturan default untuk tes iniJadi sekarang kita tahu bahwa
cucumber
kita ingin menggunakan pengaturan daritest
.sumber
Dengan kata sederhana, gagasan ini menyerupai kelas dasar dan turunan.
Di templat kelas dasar, Anda menyebutkan semua detail umum dengan '&', yang berarti dapat digunakan untuk memperluas bagian yaml lain yang membutuhkan bidang ini. Sekarang ketika Anda membuat bagian lain yang merupakan superset dari nilai konfigurasi dari struktur tipe 'kelas dasar' ini, Anda menggunakan '*' bersama dengan jangkar kelas dasar (yaitu yang dimulai dengan '&'). Anda menggunakan '<<:' sebagai gagasan yaml untuk benar-benar menempatkan bagian 'kelas dasar', yang dapat Anda timpa nanti.
Tetapi, jika Anda tidak ingin mengganti bidang yang diperluas, Anda dapat melewati '<<:'
sumber