EC2 재부팅 후 /tmp 경로에 pem 파일 지워져 nginx 오류로 웹페이지 접근 안됨.
다시 pem 파일 생성하여 해결.
$ sudo systemctl status nginx
nginx: [emerg] cannot load ertificate "/tmp/my_domain.pem": ...
nginx: configuration file /etc/nginx/nginx.conf test failed
nginx.service: Control process exited, code=exited, status=1/FAILURE
nginx.service: Failed with result 'exit-code'.
Failed to start A high performance web server and a reverse proxy server.
$ cd /tmp
/tmp$ ls
my_domain.key
my_domain_cert.crt
my_domain_chian_cert.crt
my_domain_root_cert.crt
/tmp$ cat my_domain_cert.crt my_domain_chian_cert.crt my_domain_root_cert.crt > my_domain.pem
/tmp$ ls
my_domain.key
my_domain.pem
my_domain_cert.crt
my_domain_chian_cert.crt
my_domain_root_cert.crt
2024-01-26
가비아 도메인 구매 (zenolink.co.kr)
네임서버 설정 (AWS Route53과 연결)
DNS관리 (레코드)
A @ AWS_ELASTIC_IP TTL_600_DEFAULT (zenolink.co.kr를 AWS에 연결)
A www AWS_ELASTIC_IP TTL_600_DEFAULT (www.zenolink.co.kr를 AWS에 연결)
TXT @ SSL_SECRET_AUTH TTL_600_DEFAULT (ssl을 발급받기 위한 DNS 인증)
AWS Route53 호스팅 영역 레코드 생성
zenolink.co.kr A 단순 AWS_ELASTIC_IP TTL_300_DEFAULT
zenolink.co.kr NS 단순 AWS_DOMAIN_DEFAULT TTL_60 (가비아 네임서버와 연결)
zenolink.co.kr SOA 단순 AWS_DOMAIN_DEFAULT TTL_900
www.zenolink.co.kr CNAME 단순 zenolink.co.kr TTL_300_DEFAULT
Delete duplicates by 'name' at django.
exclude()가 포인트!
from django.db.models import Count
from app_name.models import Model_name
duplicates_names = Model_name.objects.values('name').annotate(count=Count('id')).filter(count__gt=1)
for duplicate in duplicates_names:
name = duplicate['name']
duplicate_records = Model_name.objects.filter(name=name)
besk_pk = None
for record in duplicate_records:
if not best_pk:
best_pk = record.pk
best_cnt = record.cnt_drugs()
elif record.cnt_drugs() > best_cnt:
best_pk = record.pk
best_cnt = record.cnt_drugs()
duplicate_records.exclude(pk=best_pk).delete()
2024-01-19
Django Template Filter 만들어 쓰기 (Customize)
Data의 형태가 0.289467와 같이 float type일 때, 28.94 %와 같이 퍼센트로 표시하고 싶었으나, 기본 템플릿 필터에는 해당 기능 없음.
포인트는 html에서 load하는 부분과 python에서 register.filter하는 부분.
floatformat:2로 소수점 둘째자리까지 표시하는 것도 꺠알 팁!
# project_name/app_name/templatetags/__init__.py 있어야 하나?
# project_name/app_name/templatetags/filters.py
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value*arg
selenium "out of memory" issue.
엣지(Edge) 브라우저가 out of memory 오류로 이상 종료되고, 크롤링이 중단되는 이슈를 배치 프로세싱으로 해결.
batch_size = 1000
starts = 시작_idx
max_idx = 총_idx
for batch_starts in range(starts, max_idx, batch_size):
batch_ends = min(batch_starts+batch_size, max_idx)
# 배치 구성하고 배치 별로 브라우저 실행하여 크롤링 수행.
driver = webdriver.Edge(service=service, options=options)
driver.implicitly_wait(2)
for i in range(batch_starts, batch_ends):
url = 사이트_주소
driver.get(url)
'''
크롤링 수행 코드
'''
# 배치 별 브라우저 메모리 점유 삭제하고 종료.
driver.delete_all_cookies()
driver.execute_script("window.localStorage.claer();")
driver.execute_script("window.sessionStorage.claer();")
driver.quit()
2024-01-15
AWS Ubuntu server init
$ python --version
Command 'python' not found, did you mean:
command 'python3' from deb python3
command 'python' from deb python-is-python3
$ type python python2 python3
-bash: type: python: not found
-bash: type: python2: not found
python3 is hashed (/usr/bin/python3)
2024-01-12
Django ManyToManyFiled 필터링 하기.
from django.db.models import Model
class Gene(Model):
name = CharField()
class Drug(Model):
name = CharField()
gene = ManyToManyFiled(Gene)
class Indication(Model):
name = CharField()
drug = ManyToManyFiled(Drug)
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By
driver = 'path/to/msedgedriver.exe'
service = Service(driver)
options = Options()
browser = webdriver.Edge(service=service, options=options)
browser.get('http://127.0.0.1:5500/example.html')
browser.implicitly_wait(2)
specific_element = browser.find_element(By.ID, 'id_name')
next_element = specific_element.find_element(By.XPATH, 'following-sibling::*[1]')
# by XPath, following-sibling 키워드로 같은 계층 elements :: 전체(*) 중 첫[1] element
print(next_element.text)
browser.quit()
By가 핵심 변경점!
2024-01-06
html datalist
the list of input should be same with the id of datalist.