URL – Sebaiknya Relative atau Absolute?

What? Yah itulah kenyataan di dunia SEO, bagi engineer, penggunaan absolute URL tentu bukan best practices, kenapa? Karena tidak dinamis, jika kita mengganti nama domain, maka perlu penyesuaian di sana sini untuk bisa menyesuaikan dengan domain baru. Ini tentu berarti tambahan pekerjaan…

Tapi dari kacamata SEO, beda lagi… Best practice untuk SEO adalah menggunakan absolute URL, ini terkait dengan utamanya crawler budget. Silakan baca tautan berikut untuk penjelasan lebih lanjut…

Advertisements

Install supervisor – the right way

The right way ini maksudnya mirip-mirip best practice lah.. Yakni dengan tidak menggunakan super user (sudo), caranya bagaimana? Cukup tambahkan parameter –user ke perintah pip Anda…

$ pip install supervisor –user

Instalasi terletak di direktori home Anda

~/.local/bin/

Bagaimana jika meng-install sebagai super user? Tidak ada masalah sih, bisa aja, namun Anda harus tahu bahwa instalasi pip menggunakan sudo tidak disarankan dari sisi keamanan sebuah sistem.

Mudah Mengelola Long-running Processes dengan supervisor

Anda memiliki banyak long-running process dalam satu mesin? Misal running beberapa aplikasi django? Gunakan supervisorctl kalau Anda tidak ingin repot. Setelah terpasang dan konfigurasi berjalan dengan baik, mengelola banyak aplikasi menjadi mudah, cukup dengan reread, stop, start…

reread

Perintah ini untuk membaca ulang isi dari supervisord.conf

update

Perintah ini untuk menambahkan proses baru kedalam supervisord

start/stop

Perintah ini untuk memulai/menghentikan sebuah proses

status

Perintah ini untuk melihat status dari masing-masing proses yang kita miliki.

Jangan Pernah Melakukan pip install Menggunakan Root / Super User

Terus caranya bagaimana? Cukup tambahkan parameter –user, misal saya ingin meng-install supervisor, tanpa sudo, besar kemungkinan hasilnya error permission denied, untuk itu, lakukan perintah berikut:

pip install supervisor --user

Jika Anda pengguna ubuntu, maka lokasi instalasi ada di

~/.local/bin

Untuk lebih memudahkan, Anda dapat membuat alias sederhana di .bashrc:

alias supervisord="/home/kholidfu/.local/bin/./supervisord"
alias supervisorctl="/home/kholidfu/.local/bin/./supervisorctl"

Selamat mencoba

Supervisord, Supervisorctl, Nginx, Gunicorn dan Django

Bingung mau ngasih judul apa, intinya saya mau setup django yang menggunakan gunicorn dan di run secara daemon menggunakan supervisor. Sebelumnya pastikan Anda sudah memasang supervisor di komputer (mengikuti tutorial dari sini):

pip install supervisor
echo_supervisord_conf > supervisord.conf

Jalankan supervisor

supervisor -c supervisord.conf

Jika tidak ada pesan kesalahan, sekarang tambahkan command gunicorn di bagian paling bawah dari file supervisord.conf tadi. Di saya berikut ini perintah untuk gunicorn:

[program:kesuwen]
command=/Users/macbookpro/git/kesuwen/bin/gunicorn --env DJANGO_SETTINGS_MODULE=/Users/macbookpro/git/kesuwen/app --pythonpath=/Users/macbookpro/git/kesuwen/ --bind=127.0.0.1:8000 app

Jalankan lagi supervisor, dan django + gunicorn sekarang sudah di run via supervisor. Anda dapat juga mencoba supervisorctl untuk fleksibilitas yang lebih, misalnya untuk start/stop program tertentu. Caranya adalah dengan sebelumnya masuk dulu ke console supervisorctl dengan mengetikkan perintah:

supervisorctl -c ~/supervisord.conf

Setelah masuk ke prompt, jalankan perintah berikut untuk start/stop program.

start kesuwen
stop kesuwen

Selamat mencoba

Mengganti IP Address Ubuntu Server 16.04

Seringkali jika kita order dedicated server, kita akan dapat IP address lebih dari satu, dan kadang karena pertimbangan tertentu, kita ingin mengganti IP ke IP lain. Bagaimana caranya?

Sunting berkas /etc/network/interfaces, sesuaikan IP address dengan yang baru kemudian jalankan perintah:

ifdown eth0; ifup eth0

Kalau sedang login via ssh, maka terminal session pasti nge-freeze, karena koneksi terputus, tidak apa-apa, tunggu beberapa saat kemudian lakukan login kembali menggunakan IP yang baru.

Jangan lupa untuk melakukan restart service2 yang terkait dengan IP lama, misal nginx, dan lain sebagainya.

Reference: Configure Networking on Ubuntu

Auto-restart Gunicorn Setiap Menerima Request

Tentu ini bukan untuk production ya, hanya trik untuk level development sehingga tidak perlu capek2 Ctrl+c kemudian running ulang si gunicorn. Caranya adalah dengan menambahkan parameter:

--max-request 1

Jadi perintah utuhnya adalah

bin/gunicorn --log-file=-1 --max-request 1

Atau kalau cuma ingin melakukan restart sesekali, gunakan perintah ini:

pkill -HUP -f gunicorn

Selamat mencoba!

Melakukan Debug di Django Form

Pusing karena django form tidak valid? Apa yang salah? Bagaimana cara melakukan debug terhadap django form di template?

Cukup tambahkan dua baris berikut di template form HTML Anda:

{{ form.errors }}
{{ form.non_field_errors }}

Dan error di form Anda akan muncul… Selamat mencoba

Memilih option selected di Django Template

Bayangkan Anda memiliki HTML form berikut:

<select>
  <option>Madiun</option>
  <option>Sleman</option>
</select>

Tugas Anda sekarang adalah meng-assign Madiun sebagai selected tanpa harus menggunakan javascript, cukup dengan logic di views dan template django saja. Gimana caranya?

Pertama di views, kita sudah set variabel kota misal ke madiun dan pass variabel tersebut ke template:

# views.py
def awesome_city(request):
    kota = 'Madiun'
    return render(request, 'form.html', {'kota': kota})

Sekarang saatnya menambahkan logika if else sederhana di Django template untuk memilih kota sesuai dengan yang sudah ditentukan di views.py

<select>
  <option {% if kota == 'Madiun' %}selected{% endif %}>Madiun</option>
  <option {% if kota == 'Sleman' %}selected{% endif %}>Sleman</option>
</select>

Karena untuk memilih option select itu cukup dengan menambahkan parameter selected di belakang pembukaan option tag. Done! No JS needed!