페이지

2019년 4월 24일 수요일

(Roundcube) Mailbox doesn't exist: trash

(Roundcube) Mailbox doesn't exist: trash

지운 편지함이 없는 상태에서 메일을 지우면 위와 같이 에러가 발생합니다.

폴더 관리에서 Trash 폴더를 생성해주면 해결됩니다.



2019년 4월 23일 화요일

unable to allocate bitmaps for parallel garbage collection for the requested heap.


자바 메모리 할당 실패


>java -version
을 실행해도 아래와 같은 에러를 뿌리는 현상이 있었습니다.

unable to allocate 8192kb bitmaps for parallel garbage collection for the requested 262144KB heap.


여러 원인이 있을 수 있겠지만
저의 경우 시스템 메모리가 부족한 것이 원인이었고
가상 메모리를 사용하도록 변경하여 해결했습니다.
시스템 상태에 따라 적절하게 가상 메모리를 확보하면 해결할수 있을것 같습니다.


2016년 6월 22일 수요일

python django datetime timezone naive aware 정리

Python 3.5.1
Django 1.9.5
>>> from datetime import datetime
>>> # 현재시간을 확인해보겠습니다.
>>> now_naive = datetime.now()
>>> str(now_naive)
'2016-06-22 15:59:26.918742'
>>> # UTC 시간을 확인해보겠습니다.
>>> utcnow_naive = datetime.utcnow()
>>> str(utcnow_naive)
'2016-06-22 06:59:53.294294'
>>> # 두문자열을 보면 어떤게 어느지역 시간인지 분간할 수 없습니다.(naive datetime)

>>> # django 에서 제공하는 현재시간입니다.
>>> from django.utils import timezone
>>> timezone_now = timezone.now()
>>> str(timezone_now)
'2016-06-22 07:05:22.279485+00:00'
>>> # 위 문자열들과 비교해보면 뒤에 +00:00 이 붙어서 UTC 시간임을 알수 있습니다.(aware datetime)

>>> # naive 시간들을 aware 로 변경해보겠습니다.
>>> now_aware_utc = timezone.make_aware(now_naive,timezone.utc)
>>> now_aware_localtime = timezone.make_aware(now_naive,timezone.get_current_timezone())
>>> str(now_aware_utc)
'2016-06-22 15:59:26.918742+00:00'
>>> str(now_aware_localtime)
'2016-06-22 15:59:26.918742+09:00'
>>> # 앞의 시간값은 같은데 뒤의 timezone 정보만 다릅니다. utc로 지정하면 +00:00 이 붙고, current_timezone 으로 지정하면 +09:00 이 붙습니다. 즉 timezone 정보가 추가됩니다.
>>> # 따라서 naive 상태의 시간이 utc인지 current_timezone인지 명확히 알고 변경해야 합니다.
>>> # datetime.now() 는 current_timezone 이므로 now_aware_localtime 이 정확한 변환값입니다.

>>> # datetime.utcnow() 는 UTC 이므로 UTC를 지정하여 변환해줘야합니다.
>>> utcnow_aware_utc = timezone.make_aware(utcnow_naive,timezone.utc)
>>> str(utcnow_aware_utc)
'2016-06-22 06:59:53.294294+00:00'


>>> # 어떤것들은 +00:00 이 붙어서 출력되므로 일괄적으로 +09:00 이 붙은상태의 localtime으로 출력해보겠습니다.
>>> str(timezone.localtime(utcnow_aware_utc))
'2016-06-22 15:59:53.294294+09:00'
>>> str(timezone.localtime(now_aware_localtime))
'2016-06-22 15:59:26.918742+09:00'
>>> str(timezone.localtime(timezone_now))
'2016-06-22 16:05:22.279485+09:00'

참고문서

https://docs.djangoproject.com/en/1.9/topics/i18n/timezones/

2016년 6월 8일 수요일

django DEBUG = False ALLOWED_HOSTS 설정

django 개발시 기본 설정은 다음과 같습니다.
DEBUG = True
ALLOWED_HOSTS = []
DEBUG = False
로 변경하면 아래와 같은 에러가 발생합니다.
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

DEBUG = True 일때는 상관없지만 DEBUG = False 가 되면 접속가능한 호스트를
ALLOWED_HOSTS 에 추가해줘야 합니다.

ALLOWED_HOSTS = ['127.0.0.1'] 로 설정 후
http://localhost:8000/ 로 접속시
Bad Request (400)

http://127.0.0.1:8000/ 로 접속시
접속됨

ALLOWED_HOSTS = ['localhost'] 로 설정 후
http://localhost:8000/ 로 접속시
접속됨

ALLOWED_HOSTS = ['*']
로 하여 모든 곳으로 부터의 접속을 허용할 수도 있습니다.

DEBUG = False 로 하는 경우는 대부분 운영을 위한 경우이고
운영환경의 경우 아파치나 nginx 같은 웹서버를 경유하게 되므로
ALLOWED_HOSTS 에 서버의IP 만 적어 주는 것이 좋을것 같습니다.
그리고 웹서버에서 어떻게 요청을 전달하느냐에 따라 맞춰서 설정해 줘야 합니다.

django 에서 mysql 사용하기

데이터베이스 이름을 db1
유저명을 user1
유저암호를 user1_pw

데이터베이스 추가 및 유저 추가

create database db1;
grant all privileges on db1.* to 'user1'@'127.0.0.1' identified by 'user1_pw';

127.0.0.1 는 데이터베이스 서버와 django 서버가 다른서버에 있다면 django 서버의 IP 를 입력합니다.

mysqlclient 설치 - https://github.com/PyMySQL/mysqlclient-python

$ sudo apt-get install libmysqlclient-dev
$ pip install mysqlclient

데이터베이스 설정 변경 - project/settings.py

DATABASES 항목을 찾아서 다음과 같이 수정합니다.
DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'db1',
        'USER':'user1',
        'PASSWORD':'user1_pw',
        'HOST':'mysqlhost.example.com',
        'PORT':'3306',
    }
}

데이터베이스에 적용 및 수퍼유저 생성

$ python manage.py migrate
$ python manage.py createsuperuser