Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Ruby
Code

Rake 101

by
Length:LongLanguages:
This post is part of a series called All About Rake.
Rake 201

Indonesian (Bahasa Indonesia) translation by Ilham Saputra (you can also view the original English article)

Artikel ini menjelaskan dasar-dasar Rake. Ini adalah alat bangun yang sangat populer yang ditulis dalam Ruby. Ini menawarkan banyak fleksibilitas dan digunakan untuk mengelola semua jenis tugas. Jika Anda menggunakan Rails, saya sarankan melihat di bawah tenda untuk mencari tahu tugas apa yang Anda inginkan dan bagaimana menulis tugas Anda.

Topik

  • Apa itu Rake?
  • Daftar tugas
  • Mulai
  • Ruang nama
  • Prasyarat
  • Melewati Argumen
  • Tugas Menarik

Apa itu Rake?

Berkat Rails, Rake telah menjadi standar de facto sebagai alat bantu pembuatan Ruby. Ini sangat populer di komunitas Ruby. Sangat awal, tim di belakang Rails memutuskan untuk menggunakan Rake sebagai pembangun untuk Rails itu sendiri, yang berarti bahwa di masa lalu ketika Anda mengunduh Rails, Anda juga membutuhkan salinan Rake. Dengan cara itu, Rake memaparkan banyak orang. Beberapa saat kemudian, itu dimasukkan ke dalam Ruby (1.9) itu sendiri.

Rake de facto menggantikan utilitas Unix Make sebagai alat bangun di tanah Ruby. Alat bangun seperti Rake berguna untuk mengotomatisasi tugas dari berbagai jenis—perangkat lunak untuk mengelola tugas pada dasarnya. Ini sering digunakan untuk tugas-tugas administrasi di Rails—di mana Anda kemungkinan besar telah menabraknya sejauh ini—tetapi kasus penggunaannya banyak. Beberapa orang menulis ebook mereka dalam Markdown dan telah menyiapkan tugas Rake yang mengonversi file yang relevan ke file HTML perantara, yang kemudian pada gilirannya akan dikonversi ke dalam format ebook, misalnya. Menghemat banyak masalah untuk menggunakan Rake untuk itu.

Apa yang membuat Rake sangat kuat adalah bahwa tugas-tugas ini dapat berhubungan satu sama lain dan dapat dibangun di atas satu sama lain. Juga, karena ditulis dalam Ruby, Anda dapat menulis kode Ruby apa pun untuk tugas Anda. Ingin menggunakan pustaka Ruby dalam tugas Rake Anda? Tidak masalah! Fakta menyenangkan: itu adalah RubyGem yang paling banyak diunduh, dengan lebih dari 100 juta unduhan. Jadi pasti ada sesuatu di sabuk alat Anda yang harus Anda perhatikan sedikit lebih banyak.

Itu dikandung oleh almarhum Jim Weirich, seorang pengembang, pembicara dan kontributor terkenal untuk ekosistem Ruby. Benar-benar alat yang indah—terima kasih, Jim! MENINGGAL DUNIA!

Daftar tugas

Mari kita lihat beberapa tugas yang ditawarkan Rails langsung dari kotak. Saya yakin Anda sedikit terkejut dengan apa yang tersedia jika Anda belum memeriksanya. Di direktori yang relevan dari aplikasi Anda atau Rakefile Anda, Anda bisa mencantumkannya dengan mengetik berikut ini ke dalam shell:

Output:

Output di aplikasi Rails sangat banyak, bukan? Anda dapat menemukan banyak tugas yang lebih berguna daripada rake db:migrate biasa atau rake routes yang sangat kita kenal dan jalankan beberapa kali setiap hari.

Di sebelah kiri, Anda melihat berbagai tugas, dan di sebelah kanan, Anda melihat apa yang secara opsional disediakan sebagai deskripsi untuk setiap tugas menyapu. Jika Anda ingin melihat daftar lengkap, yang antara lain juga mencakup tugas-tugas yang tidak memiliki deskripsi, Anda perlu menambahkan bendera tambahan.

Shell:

Output:

Kejutan, hampir tiga kali lipat! Lihatlah mereka dan bermain-main jika Anda suka, tetapi komit highlight untuk memori untuk penggunaan nanti di masa depan. Memeriksa tugas untuk melihat apa yang tersedia mungkin mencegah Anda menemukan kembali roda.

Mulai

Rakefile dapat memiliki salah satu dari lima penampilan berikut:

  • rakefile.rb
  • rakefile
  • Rakefile
  • Rakefile.rb
  • .rake files

Sebagian besar Anda akan melihat versi Rakefile yang polos, tapi kerangka seperti Rails membutuhkan lebih kompleks organisasi. Menggunakan apa pun akan mengalir darah Anda. Anda mulai dengan membuat Rakefile atau file dengan ekstensi .rake jika Anda ingin membagi tugas secara logis lebih dari beberapa file. Kemudian tentukan tugas Anda di dalam salah satunya.

Organisasi Rakefile Kustom

Rel membuat ini sangat mudah. Ini memiliki Rakefile di root aplikasi Anda. Ini berisi yang berikut:

Rakefile

Ketika Anda memiliki banyak tugas khusus, lebih masuk akal untuk memecahnya menjadi file .rake diskrit dan menempatkannya di lib/tasks. Rakefile di atas hanya memuatnya, tetapi direktori lib adalah rumah logis yang lebih baik untuk tugas-tugas tersebut. Bahkan ada generator Rails untuk mengotomatisasi bagian dari proses. Jika Anda mengetik:

Shell

Anda akan mendapatkan Rakefile ditempatkan secara otomatis di direktori yang benar. Bahkan tugasnya sudah diatur untuk Anda. Bagus! Dalam proyek lain, tidak menggunakan Rails, Anda hanya perlu membuat direktori rakelib dan menempatkan Rakefiles Anda di sana—lebih disukai dengan ekstensi file .rake. Kemudian buat file bernama Rakefile dan semua file ini sudah siap membantu Anda.

Anatomi Tugas Rake

lib/tasks/some_task.rake

Untuk pemula Ruby yang lengkap di antara Anda, dan untuk orang-orang yang berasal dari bahasa yang menggunakan braket, beginilah tampilannya dengan tanda kurung.

Tampak sangat aneh. Kehilangan kurung tambahan—tidak ada yang menulis tugas dengan cara ini.

Kami menyediakan tugas bernama :about dengan deskripsi yang tidak hanya mengingatkan kita di masa depan apa yang ingin kita capai dengan tugas tertentu, tetapi juga muncul ketika kita menjalankan rake -T. Jangan malas pada bagian ini; mungkin tidak sepadan.

Tepat di bawah ini adalah tugas kata kunci yang mendefinisikan tugas baru yang dinamai about. Ini dapat dipanggil pada baris perintah melalui rake about yang melakukan sihirnya kemudian. rake :about di sisi lain akan menyebabkan Rake batal, tidak tahu "bagaimana membangun tugas: tentang".

Melalui blok do end, kami memiliki lambda, dan tubuhnya menentukan apa tugasnya. Ini adalah pengaturan dasar yang diperlukan suatu tugas. Ini menawarkan lebih banyak pilihan, tentu saja, tetapi struktur keseluruhannya sama.

require / import

Beberapa Rakefile

Jika Anda perlu memasukkan file Ruby atau Rakefiles lain, itu dapat dengan mudah dicapai dengan pernyataan standar require.

Beberapa Rakefile

Menyapu itu sendiri menyediakan kita dengan cara lain untuk melakukan hal ini-metode import. Ini dapat digunakan dalam setiap jenis Rakefile. Yang ini akan membantu ketika Anda mengalami masalah karena file yang diperlukan dimuat sebelum Rakefile selesai memuat dan karena itu meledak. File yang diimpor, di sisi lain, akan selalu memuat setelah Rakefile.

aktifkan & eksekusi

Kadang-kadang Anda mungkin ingin menjalankan beberapa tugas yang ditentukan dari kelas Task Anda secara manual. Untuk tujuan ini, Anda memiliki dua metode kelas Rake::Task class: execute dan invoke.

Dengan kode Rake::Task ['some_task'], kami mendapat tugas Rake some_task untuk mengeksekusi. Ini mengembalikan instance kelas Rake::Task dan kemudian menjalankan metode apapun itu yang tersedia.

Ruang nama

Fitur yang sangat keren adalah kemampuan untuk namespace tugas-tugas Anda. Anda mungkin telah menggunakan puluhan kali sudah. Ketika Anda menjalankan rake db:migrate, Anda telah menggunakan db namespace, misalnya. Anda memanggil tugas dengan memisahkan dengan usus besar : dari namespace. Namespaces adalah cara yang berguna untuk mengatur tugas-tugas Anda dalam file menyapu—itu membuat mereka secara logis dipisahkan. Beberapa namespaces seperti rake time:zones:all baik-baik saja, dengan cara.

Contoh lain termasuk:

Beberapa Rakefile

Ini adalah pengaturan dasar. Pada kenyataannya itu jauh lebih rumit dan bahkan dapat disarangkan beberapa kali. Silakan mengintip cepat pada basis kode Rails dan lihat sendiri bagaimana rake db:migrate diimplementasikan. Jangan merasa buruk jika itu di luar kepala Anda. Lihat saja sekeliling, cobalah untuk melihat bagaimana strukturnya, dan lanjutkan untuk sekarang.

Prasyarat

Strategi lain untuk mengatur tugas Anda dan menjaganya KERING adalah menggunakan prasyarat untuk menjalankan tugas. Ini seperti ketergantungan yang harus dijalankan terlebih dahulu sebelum tugas yang sebenarnya memulai tugasnya. Dengan begitu Anda dapat membangun tugas yang lebih kompleks—serumit yang Anda butuhkan. Tetapi saya akan merekomendasikan untuk tidak terlalu pintar dan menjaganya sesederhana mungkin—dan semudah mungkin untuk memahami juga.

Beberapa Rakefile

Jika Anda ingin bergantung pada banyak tugas, Anda cukup memasukkannya ke dalam array. Urutan di mana Anda menempatkan mereka penting, tentu saja.

Jika Anda menjalankan tugas menyapu yang bergantung pada yang lain, kami akan mendapatkan hasil berikut:

Shell

Urutan di mana Anda mendefinisikan tugas menyapu Anda tidak berpengaruh pada output—hanya urutan di mana Anda menempatkan tugas prasyarat dalam array untuk dependensi tugas. Juga, silakan gunakan sintaks hashrocket => untuk ini.

Daftar panjang dependensi mungkin berupa bau kode. Jika Anda harus berurusan dengan sesuatu yang panjang, bersihkan dengan merangkumnya dalam metode yang kemudian kami sampaikan sebagai prasyarat.

Dalam konteks prasyarat, satu hal yang perlu diingat adalah bahwa Anda hanya perlu menyebutkan namespace jika Anda berada di luar yang relevan.

Beberapa Rakefile

Penting untuk dicatat, meskipun: jika Anda perlu menyebutkan namespace, Anda harus melewati prasyarat sebagai string => 'marsellus_wallace:call_winston_wolf'.

Tentu saja, contoh di atas adalah contoh konyol dan bukan kehidupan nyata, tetapi tujuannya adalah untuk menunjukkan kepada Anda bagaimana prasyarat bekerja dan bagaimana Anda menggabungkannya sementara mereka saling bergantung.

Melewati Argumen

Anda memiliki dua opsi untuk meneruskan argumen ke tugas Rake: baik dengan menggunakan variabel Bash atau dengan menggunakan sintaks Rake itu sendiri.

Variabel ENV

Seandainya Anda belum pernah bermain dengan Bash sebelumnya—atau Bash terdengar seperti yang Anda bayangkan—mari ambil lima dan mulai dari awal. Bash di shell Anda menawarkan dua jenis variabel: variabel global (alias lingkungan) dan variabel lokal. Keduanya ditulis dalam huruf besar. Variabel lingkungan yang global, yang berarti mereka tersedia dalam semua kerang dan tidak lenyap ketika Anda menutup satu—tidak seperti variabel Bash lokal, hanya tersedia dalam shell saat ini.

Variabel lingkungan dapat berisi data yang dapat digunakan oleh beberapa aplikasi dan sering digunakan sebagai cara yang berguna untuk berbagi pengaturan konfigurasi. Kontras dengan itu, variabel Bash lokal yang hanya itu, lokal. Dalam konteks kami menggunakan Rake, Anda memiliki kemampuan untuk mengakses keduanya melalui Ruby dan berlaku lulus variabel dari baris perintah.

FYI

Hanya sebagai samping kecil, jika Anda mengetik env atau ENV di shell Anda, Anda akan mendapatkan akses ke sejumlah variabel lingkungan. Saya disunting daftar, tetapi untuk pemahaman yang lebih baik dari apa lingkungan variabel dan apa yang mereka termasuk, saya mendorong Anda untuk menjalankannya sendiri.

Shell

Output

Jika Anda ingin melihat daftar lokal Bash variabel, Anda dapat menjalankan set.

Shell

Perintah set memberi Anda lebih banyak output, tetapi di atas menunjukkan Anda bit yang relevan segera.

Metode Kelas ENV Ruby

Ruby menawarkan cara untuk menggunakan lingkungan dan variabel Bash lokal sama melalui pengakses hash. Untuk kebutuhan kami, ketika kami meneruskan variabel ke tugas Rake, itu akan menjadi variabel Bash lokal, yang dapat Anda temukan di daftar variabel yang menjalankan set atau variasi darinya. Ruby dapat membacanya menggunakan ENV ['VARIABLE'].

Shell

Apa yang saya inginkan untuk membuat jelas, meskipun, adalah bahwa variabel ini tidak akan ditambahkan ke daftar ENV yang menggunakan sistem Anda—hal-hal yang Anda lihat memanggil env dari shell. Untuk menambahkannya ke daftar itu, Anda akan perlu untuk eksport. Ini adalah cerita lain, tapi saya pikir saya harus membuat ini jelas.

Beberapa Rakefile

Dalam definisi tugas ini, Anda dapat melihat bagaimana kami siap untuk menerima atau memasukkan variabel yang diteruskan ke permintaan tugas. ENV[BASHVARIABLE] Ruby melakukan semua pekerjaan berat. Jika BOOKTITLE telah variabel lingkungan global, meskipun, kita bisa mengakses itu di dalam definisi tugas ini juga dengan sintaks ini.

Sintaks Parameter Rake

Pendekatan kedua menggunakan sintaks Rake murni. Anda cukup meneruskan variabel ke kurung kurawal. Pendekatan itu lebih baik, dan Anda dapat membuat hal-hal lebih terisolasi. Mengapa melibatkan Bash jika Rake benar-benar mampu menangani ini? Plus, Anda tidak memiliki variabel Bash yang mengambang di sana. Jika Anda ingin memberikan beberapa argumen ke tugas, itu juga jauh lebih elegan.

Shell

Beberapa Rakefile

Ketika Anda melewati dalam argumen lain daripada yang sudah Anda tetapkan dalam tugas Anda, Anda hanya dapat mengaksesnya melalui args. args.extras menampilkan array dari semua parameter tambahan yang diteruskan. args.to_a menunjukkan kepada Anda semua parameter—dalam sebuah array juga, tentu saja.

Tugas Menarik

Di bawah ini adalah daftar singkat tugas Rake yang datang dengan Rails:

  • db
  • doc
  • tmp
  • stats
  • notes
  • about
  • secret
  • assets
  • routes

db

Berikut adalah beberapa tugas berguna di bawah namespace db untuk menjalankan migrasi Rekaman Aktif:

rake db:version mencetak versi skema saat ini. Outputnya terlihat seperti ini:

rake db:migration menjalankan migrasi terakhir(s) yang belum berjalan. Anda juga dapat melewatinya migrasi khusus untuk dijalankan.

Shell

rake db:create buat database Anda. Jika default untuk pengembangan dan menguji basis data.

rake db:test:prepare memastikan bahwa migrasi yang sudah berjalan pada database pengembangan Anda juga dijalankan untuk database pengujian Anda. Jika skema basis data pengujian tidak selaras dengan basis data pengembangan Anda, tentu saja itu tidak akan sangat berguna.

rake db:drop:all default semua drop test dan development database.

rake db:migrate:uprake db:migrate:down menjalankan metode up dan down untuk migrasi yang dimaksud.

rake db:redo memastikan bahwa, setelah Anda menjalankan migrasi, migrasi dapat dibalik. Ini berjalan rake db:down dulu dan kemudian rake db:up.

rake db: rollback membatalkan migrasi terakhir.

rake db:drop drop oleh pengembangan dan uji database secara default

rake db:reset menjatuhkan basis data terlebih dahulu dan mengaturnya kembali dengan memuat skema dan seeding database

doc

rake doc:app menghasilkan dokumentasi di bawah doc/app. Ini menciptakan halaman HTML tentang kode sumber Anda untuk penjelajahan yang mudah. Sangat keren!

Screenshot

A screenshot of the mission controller

rake doc:rails menghasilkan dokumentasi API di bawah doc/api—juga sebagai halaman HTML. Berguna jika Anda offline, saya kira.

tmp

Direktori tmp dalam direktori root dari aplikasi Rails Anda adalah tempat untuk berkas sementara—paling mencolok file untuk sesi dan cache. rake tmp:create membuat Anda siap dengan semua yang Anda butuhkan untuk menangani file sementara. rake tmp:cache:clear direktori tmp/cacherake tmp:sessions:clear membersihkan direktori tmp/sessions.

statistik

rake stats memberi Anda gambaran bagus tentang aplikasi Anda.

notes

Anda dapat meninggalkan catatan dalam kode Anda. Anda dapat mengawalinya dalam komentar Anda dengan TODO, FIXME, OPTIMIZE.

Beberapa file Ruby

Saat Anda menjalankan rake notes, Rake mem-parsing prefiks ini dan membuat Anda daftar semua catatan ini dari kode Anda.

Shell

Anda bahkan mendapatkan daftar terperinci tempat Anda menemukannya—direktori, nama file, nomor baris [Line Number], semuanya disertakan. Luar biasa, bukan?

about

rake about memberi Anda gambaran umum nomor versi untuk:

  • Rails
  • Ruby
  • RubyGems
  • Database adapter
  • Schema version
  • Middleware
  • Application root

dan banyak informasi bermanfaat lainnya.

secret

Jika Anda paranoid tentang kunci sesi Anda dan ingin menggantinya, rake secret akan menghasilkan kunci pseudo-acak baru untuk Anda. Tapi itu tidak menggantikan kunci untuk Anda. Output di shell terlihat seperti ini:

assets

rake assets:precompile memungkinkan Anda mengkompilasi ulang aset Anda di bawah public/assets. Jika Anda ingin menyingkirkan aset yang lebih tua, jalankan saja rake assets:clean. Akhirnya, menjalankan rake assets:clobber menghapus seluruh direktori public/assets.

routes

rake routes mungkin yang paling penting. Ini menunjukkan semua rute di aplikasi Anda.

Pikiran terakhir

Menulis tugas Rake tanpa mengetahui apa yang terjadi di bawah tenda menjadi sangat cepat membosankan. Artikel ini sedikit pemanasan dan pengantar untuk orang-orang yang ingin mengintip Rake untuk pertama kalinya.

Saya harap itu mencakup semua dasar-dasarnya tanpa menjadi terlalu kering—lagipula, Rake sangat tolol dan semuanya, tetapi pada saat yang sama, itu mungkin bukan mainan yang paling seksi. Pengetahuan dasar Rake ini, bagaimanapun, akan memberi Anda semua yang Anda butuhkan untuk menjadi berbahaya dan memperluas pengetahuan Anda tentang tugas-tugas Rake yang Anda inginkan.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.