Muhammad Hafid

Muhammad Hafid

Muhammad Hafid

Muhammad Hafid

Janganlah malas untuk berkarya, biarpun sederhana tetapi bermanfaat bagi orang lain. Kerjakan dengan penuh kesabaran dan keikhlasan

Solve Problem Django db utils ProgrammingError relation TABLENAME already exists

Pernah kalian mengalami error semacam ini ketika kalian hendak menjalankan perintah migrate atau migrations di django ?
django.db.utils.ProgrammingError: relation "django_content_type" already exists
django.db.utils.ProgrammingError: relation "auth_permission" already exists
django.db.utils.ProgrammingError: relation "django_admin_log" already exists
django.db.utils.ProgrammingError: relation "admin_tools_dashboard_preferences" already exists
django.db.utils.ProgrammingError: relation "django_session" already exists
django.db.utils.ProgrammingError: relation "django_site" already exists
Problem semacam itu menurut saya aneh, karena ya memang sudah pasti tabel-tabel tersebut sudah ada, akhirnya saya coba menDROP tabel itu lalu menjalankan migrate atau migration, dan cara ini tidak menjadi solusi buat saya bahkan saya menjadi jengkel.

Oke permasalah tersebut adalah dikarenakan ada proses migrations atau migrate pada tabel yang failed. Bagaimana kita mencari tau tabel apa yang bermasalah ? caranya cukup mudah hanya jalankan perintah dibawah ini :
python manage.py migrate --fake-initial
Nanti akan muncul app mana / tabel mana yang harus diperbaiki, seperti kasus saya dibawah ini :
Running migrations:
  Applying sysconf.0001_initial... FAKED
  Applying user_sessions.0001_initial... OK
  Applying user_sessions.0002_auto_20151208_1536... OK
  Applying user_sessions.0003_auto_20161205_1516... OK
  Applying user_sessions.0004_auto_20171220_1701... OK
  Applying user_sessions.0005_auto_20180302_1459... OK
Setelah itu coba kalian jalankan kembali migrate atau migrations, pasti sudah tidak error already exist lagi.

Push Auth Gitlab dengan SSH

Mengapa sih perlu SSH untuk auth git kalian ? saya pribadi malas untuk sering-sering memasukan username / email dan password ketika hendak push / melakukan update dan upload source di git, menurut saya itu memakan waktu paling tidak beberapa detik.

Disini saya akan berbagi tips bagaimana ketika hendak push ke gitlab tidak perlu memasukan username dan password, tetapi kalian tidak perlu khawatir untuk authentikasinya karena disini kita akan menggunakan SSH key.

TAHAP 1
Sebelum ke tahapan setting SSH untuk git, kalian harus membuat SSH key di perangkat kalian dan saya sudah menuliskan tutorialnya disini :
http://www.mhafid.info/2018/04/membuat-ssh-di-ubuntu-linux.html
TAHAP 2
Oke jika sudah mempunya Key SSH sekarang masuk kedalam account gitlab kalian dan buka project kalian di gitlab.
  • Pilih project di Gitlab
  • Overview - Details
 Perhatikan gambar dibawah ini :
ubah menjadi SSH bukan HTTPS.

TAHAP 3
Sekarang masuk ke Profile Setting kalian :
  • Klik profil kalian dengan mengklik foto di pojok kanan atas
  • Pilih Settings / Pengaturan
  • Masuk ke menu SSH Key
  • Cari file id_rsa.pub di komputer kalian dan buka dengan notepad, copy dan pastekan kedalam kolom SSH key Textarea di Gitlab Settings
Sekarang kalian coba push project kalian, apakah masih meminta username dan password ? seharusnya tidak dan anda akan ditanya seperti ini :
The authenticity of host 'gitlab.com (52.167.219.168)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no)?
Ketikan Y, bahwa kalian setuju login menggunakan auth SSH.

Membuat SSH di Ubuntu Linux

Jika kalian belom paham mengenai SSH kalian bisa baca di google, banyak situs yang membahas mengenai SSH itu sendiri. Disini saya tidak akan panjang lebar membahas mengenai SSHnya.


Manfaat SSH disini adalah salah satunya seperti kasus saya. Saya mempunya account Gitlab dan saya sering beraktifitas di GitLab.

Nah dimana manfaatnya SSH ? jika kalian terbiasa menggunakan Gitlab atau Github pasti kalian suka menjalankan Push ke server Git, nah pada saat push ke server git kalian pasti akan diminta untuk memasukan username/email kalian begitupun dengan passwordnya, dan ini menurut saya memakan waktu setidaknya beberapa detik, alangkah asiknya jika pada saat kita push kita langsung terautorize tanpa memasukan username/email dan password nya.

Itulah manfaatnya SSH, ditutorial selanjutnya saya akan membahas bagaimana bekerja dengan SSH untuk GitLab.

Sebelum ke pembahasan SSH Gitlab, langkah pertama kalian harus mempunya SSH di leptop kalian. Saya menggunakan OS Linux Ubuntu ya, jadi tutorialnya pas jika di terapkan di ubuntu.
Install SSH : sudo apt-get install openssh-server
sudo service ssh status
Bagaimana cara menggenerate keynya ?
Disini saya sudah terbiasa dengan 1 account email untuk account gitlab, github, dll. Jadi sebelum kalian menggenerate keynya kalian harus tetapkan 1 account bisa berupa username atau email, dan jangan kwatir SSH key bisa di generate lebih dari 1 key kok.

Ketikan di terminal kalian seperti dibawah ini :
ssh-keygen -t rsa -C "email@mhafid.com" -b 4096
Dan nanti akan tampil seperti dibawah ini :
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hafid/.ssh/id_rsa):
/home/hafid/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Jika kalian pernah membuat key sebelumnya dengan menggunakan email tersebut akan ditanya "apakah ingin generate ulang dengan menimpa / Overwrite atau tidak", jika iya ketikan Y jika tidak ketikan N.

Selanjutnya kalian akan di tanya passphrase, kalian bisa cari penjelasan passphrase di google ya, disini saya tidak menggunakan passphrase, jika kalian menggunakan passphrase silahkan kalian isi, ini semacam kata kunci generate hashnya.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Tunggu proses sampai muncul seperti dibawah ini :
Your identification has been saved in /home/hafid/.ssh/id_rsa.
Your public key has been saved in /home/hafid/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vEpE5w7B9HkV+UHIiTxW7REFJBqCeEb2CxQWaualCCA email@mhafid.com
The key's randomart image is:
+---[RSA 4096]----+
|E    oO+...+=O=+.|
|o   .B+o o=+=.+  |
|.   +o* =.o. o o |
| . = + * o    o  |
|  . o o S        |
|     . o .       |
|      . o        |
|     . .         |
|      .          |
+----[SHA256]-----+
Nah yang dinamakan SSH key yang mana sih ? perhatikan yang di cetak tebal.
Dan file SSH nya disimpan didalam direktori : home/hafid/.ssh/id_rsa.pub

Semoga cukup jelas ya penjelasan saya. Terima kasih sudah berkunjung


Membuat Global Function didalam App di Django

Pernah terpikir untuk membuat global function ? maksudnya adalah membuat function yang digunakan di beberapa tempat tetapi dalam 1 app. Gunanya membuat global function agar ketika function itu di butuhkan jadi tidak perlu untuk menuliskan kembali functionnya / memangil berkali - kali. Lebih ringkas dengan menggunakan import forn nama functionya.
Disini saya akan memberikan contoh bagaimana membuat global function. Saya menggunakan Django versi 1.11.11 dan python 2.7.

Masuk kedalam direktori app kalian, buat file dengan nama utils.py (nama file bebas yang penting .py) sejajar dengan file models.py, admin.py dan lain-lainnya. Perhatikan screenshoot saya dibawah ini :

Diatas saya membuat contoh gloal function dengan nama "Terbilang". Perhatikan peletakan file utils.py.

Lalu bagaimana cara memanggil functionnya ?

Misalkan saya ingin menggunakan functionnya di dalam models.py, tambahkan baris dibawah ini :
from .utils import Terbilang
Apakah bisa didalam file utils.py lebih dari1 function ? Jawabannya BISA, tinggal buat saja function nya didalam file utils.py lalu pada saat manggil tinggal tambahkan menjadi seperti dibawah ini :
from .utils import Terbilang, NamaFunc1
Mudah bukan ?
Selamat Mencoba.

Login Console PostgreSQL Heroku

Bermain di heroku kembali ya teman teman, disini saya ingin memberikan sedikit tutorial untuk catatan saya pribadi. Cara masuk / remote database di heroku dengan menggunakan console. Ikuti yuk langkah-langkah berikut ini :
Masuk kedalam path project kalian di lokal kalian, dan login heroku kalian, setelah itu ikuti langkah dibawah ini :
  1. Login ke web Heroku
  2. Masuk ke bagian Hobby Dev, atau Installed Add-ons, biasanya setelah kalian login dan klik project kalian di web heroku, bagian ini ada di paling atas pojok kiri
  3. Setelah kalian klik, ada 3 tab yaitu overview, durability dan setting. Kalian masuk kedalam setting ya
  4. Klik database credential
  5. Setelah itu kalian kembali ke console kalian dan ikut baris dibawah ini 
psql "dbname=Database host=Host user=User password=Password port=5432 sslmode=require"

Yang dicetak tebal kalian cocokan dengan informasi database credential kalian.
Semoga bermanfaat ya.

Database Heroku Above limits, access disruption imminent

Siapa yang sudah sering main di heroku ? Heroku tempat untuk deploy aplikasi yang menurut saya cukup lah untuk hanya sekedar testing dan demo saja.


 Disini saya ingin memberikan arti mengenai pesan seperti dibawah ini :


Above limits, access disruption imminent
Maksud dari error diatas adalah bahwa ada data pada tabel kalian yang melebihi dari maksimal yang heroku sediakan untuk versi freenya yaitu 10.000 rows  / data. 
Coba cek tabel kalian di database kalian apakah ada data yang mencapai melebihi dari 10.000 ? jika iya maka tidak akan optimal database deploy kalian di heroku.

Cara saya cek databasenya adalah saya tinggal masuk ke phppgadmi saya di lokal leptop saya, kebetulan saya menggunakan postgresql, dan disana saya liat ada pada kolom Estimated row count ternyata 82505 data.

Perhatikan data saja gambar dibawah ini ada 2 tabel yang datanya melebihi 10.000 data. hehehe

Nah kalian bisa juga cek langsung online di heroku kalian dengan mengetikan :
heroku pg:info
Hasilnya adalah :
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            10.2
Created:               2018-03-02 13:22 UTC
Data Size:             36.0 MB
Tables:                35
Rows:                  181143/10000 (Above limits, access disruption imminent)
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Add-on:                postgresql-metric-57484
Disana terlihan bahwa rows kalian melebihi dari yang heroku berikan.

Itu menurut kesimpulan saya mengapa ada pesan seperti itu.

Semoga informasi ini bermanfaat, terima kasih.

Memindahkan Direktori Default Apache

Pasti sudah tidak asing lagi dengan yang namanya apache atau lampp kan ? kenapa disebut lampp karena singkatan dari Linux Apache MySQL dan PhP.
Disini saya akan memberikan tutorial singkat namun mudah di lakukan dan mudah di mengerti. Disini saya menggunakan Lampp bukan dari paket xampp yang sudah menjadi 1 budle ya. disini saya melakukan installasi lampp sendiri - sendiri atau secara terpisah mulai dari apache, mysql nya lalu versi php nya.

Tahapan installasi nya sih mudah, sebagai bonus tambahan, berikut cara installasinya :
  • sudo apt-get install apache2
  • sudo apt-get install mysql-server
  • sudo apt-get install php5 libapache2-mod-php5
  • sudo /etc/init.d/apache2 restart
Setelah itu coba kalian ketikan localhost pada browser kalian.  Jika muncul welcome page apache berarti installasi kalian sukses.

Untuk memasukan source nya pasti akan disimpan didalam direktori
 /var/www/html
Nah semua pasti tau kalau lokasi folder tersebut adalah harus akses root, dan ini bagi saya ribet.
Saya kasih tau supaya tidak ribet, lokasi var/www/htmlnya kita pindahkan. kita arahkan ke folder lain sesuka hati kita.

Misalkan saya membuat folder didalam direktori Home dengan nama Workspace.
Cari file dengan nama 000-default.conf, biasanya terletak di etc/apache2/sites-available/

 Setelah itu coba buka file tersebut lalu cari baris :
DocumentRoot /var/www/html/ menjadi direktori path yang sudah kalian tentukan
DocumentRoot /home/hafid/Workspace/
Setelah tu cari file dengan nama apache2.conf, biasanya terletak di /etc/apache2/
Lalu coba kalian restart apache kalian.

Back To Top