Strings must use singlequote 에러

Strings must use singlequote 에러

Prerequisite

  • vue 2.8.2.
  • webpack 2.6.1
  • eslint 3.19.0

문제점

Vuejs를 사용하면서 라이브러리를 사용하고 싶을 때가 생깁니다.
제 경우는 table 관련 라이브러리를 원해서 찾아보던 중,
GitHub – vuejs/awesome-vue: A curated list of awesome things related to Vue.js) 이 곳에서 본 vuetiful-datatable 을 사용하려고 코드에 적용해서 테스트를 해봤는데 이러한 에러가 발생했습니다.

Strings must use singlequote

원인

관련해서 찾아보니 eslint에서 quote 를 하나로 강제하는데, 제 프로젝트(vue-cli를 이용해 만든 webpack template)는 single quote를 사용하는데 반해 vue-datatable 의 코드는 double quote를 사용하고 있어서 였습니다.

해결

Allow enforcing single/double-quotes without preventing use of template literals · Issue #5234 · eslint/eslint · GitHub

위 내용을 참고 해서 프로젝트 ROOT 폴더의 .eslintrc.js 파일에 해당 줄을 추가해줬습니다.

"quotes": [2, "double", { "avoidEscape": false }],

.eslintrc.js

  'rules': {
    // allow paren-less arrow functions
    'arrow-parens': 0,
    // allow async-await
    'generator-star-spacing': 0,
    "quotes": [2, "double", { "avoidEscape": false }],
    // allow debugger during development
    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
  }

근데 이렇게 하니 반대의 에러가???

Strings must use doublequote

관련 문서 – Rule quotes – ESLint – Pluggable JavaScript linter 를 찾아보니 둘다. (Single and double quote) 되게는 못하는듯? lint를 사용하지 말아야하나…..

그리하여 결국,
해결은 어이없게 한것이….
라이브러리를 변경했습니다….
vue-datatablevuejs 1.x 지원인 듯한 관계로,
vue-data-tablesVue2.0 DataTables, based on element-ui
위의 라이브러리로 변경 후에 테스트 모듈 작성 완료!

관련 샘플 코드는 하단 참고하시면 됩니다.
GitHub – 9to6/vue-data-tables-test

추가

라이브러리 변경 후 해결한 뒤, 또다른 라이브러리를 사용하려다 보니 같은 문제가 발생 했습니다.
결국 quote error 를 무시하기로 결정!

혹시 필요하신 분이 있으실 까 해서 적어둡니다.

In .eslintrc file

'quotes': ['off', 'single'],

위의 내용을 rules에 추가하면 quote 를 무시하게 됩니다.

크로스 도메인 이슈

서문

요즘 마이크로 서비스가 대세입니다.
저는 요즘 Vuejs 를 이용한 Web app 을 만들려고 시도 중입니다.
이 웹앱을 마이크로 서비스로 만들려합니다. 이러한 경우에 만나는 문제가 바로 크로스 도메인 문제, CORS(Cross Origin Resource Sharing) 이슈입니다.

환경

현재 시스템은 localhost:8080 에 떠있는 RESTful API Server 에. localhost:8082에 떠있는 Web App 에서 http 요청을 해서 데이터를 가져오는 형태입니다.

문제점

간단한 SPA(Single Page Application) 어플을 만들 때, 이 웹 어플리케이션에 채워지는 데이터는 REST API 를 이용, 비동기 네트워크 통신으로 API 서버와 WEB APP의 서버가 다른 경우가 생깁니다.

이때 Web app 에서 ajax를 이용해서 REST API 를 호출하면 Browser console window 에서 이런 에러를 만나게 됩니다.

XMLHttpRequest cannot load http://localhost:8080/v1/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.

원인

보안 상의 이유로, 브라우저들은 스크립트 내에서 초기화되는 cross-origin HTTP 요청을 제한하기 때문입니다.

해결책

간단합니다.
RESTful API서버의 RESPONSE HEADER 에 하나만 추가해주면 됩니다.

Access-Control-Allow-Origin: *

만약 특정 도메인만 허용하고 싶다면,

Access-Control-Allow-Origin: http://test.com, http://test2.com, …

이런 형태로 사용하시면 됩니다.

Vuejs History mode 테스트 해보기

Vuejs History mode 테스트 해보기

요즘 Vuejs를 스터디 중입니다.
그래서 간단히 Vuejs 문서를 읽어 가면서 스터디 내용을 정리하던 중에 Vuejs history mode를 직접 테스트 해보고 싶어졌습니다.
읽어보다보니 history mode는 필수라고 생각 되었거든요.

HTML5 History 모드 · vue-router
위 문서 참조.

Vuejs history mode를 테스트 해보기 위해서는 서버 설정이 필요한데,
간단한 기본 껍데기만 만들어서 테스트 해보고 싶었으나(webpack 설정 없이..), node 알못npm project settings 알못 인 관계로 간단한 서버(backend)위에 vuejs(frontend) 를 얻는 방법을 못찾아서 결국 포기…

그냥 express 프로젝트에 vuejs를 연동하기로 마음 먹었습니다. (webpack을 이용해서)

express와 vue를 이용한 개발 환경 구성 살펴보기 – Vue.js 한국 사용자 모임

이 페이지를 참고하여 구성해보았습니다.

관심 있으신 분은 GitHub – 9to6/vue-router-express: Vuejs + Vue-router + express 여기 소스 및 REAMDE를 참고 해주세요.

결론

만들어 놓고 보니 backend 와 연동하기 위해 vuejs를 컴파일해서 index.html을 얻어내야하는 불편함이…
물론 vuejs 코드만을 테스트 하려면 npm run dev로 가능하겠지만…

이제 history mode테스트도 해봤으니, 본격 vuejs를 이용한 프로젝트에 착수할 수 있으려나…

.deb File 설치방법

.deb File 설치방법

확장자가 .deb 인 파일은 debian 리눅스에서의 설치파일로, 같은 계열인 ubuntu 에서 손 쉽게 설치 가능합니다.

설치

$ sudo dpkg -i filename.deb 

제거

$ sudo dpkg -r PACKAGE_NAME

보통은 apt-get 을 이용하지만 .deb 파일을 직접 설치할 경우 유용한 명령입니다.

RoR (rails) Dockerfile tip

RoR (rails) Dockerfile tip

루비 온 레일즈 (Ruby on Rails)를 Docker 로 배포할 때 간단 팁입니다.

Rails 를 도커로 배포할 때 가장 큰 문제는 Rebuild 시간이 오래걸린다는 것입니다.

원인은 바로 bundler !!

$ bundle install

이놈이 오래걸립니다.

하여 예전에 이 Article 을 보고 적용해서 쓰던 중 보다 괜찮은 방법이 있어서 기록합니다.

Prerequisite

  • ruby 2.3.4
  • Rails 5.1.2
  • docker 17.06-ce

Rails on Docker

제가 쓰는 Dockerfile 을 아래 공유합니다.

FROM ruby:2.3.4-slim
LABEL maintainer="9to5, ktk0011+dev@gmail.com"

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
    build-essential git libpq-dev nodejs vim libxslt-dev libxml2-dev cron && \
    rm -rf /var/lib/apt/lists/*

ENV INSTALL_PATH /app
WORKDIR $INSTALL_PATH

ENV BUNDLE_FROZEN=1 BUNDLE_DISABLE_SHARED_GEMS=true BUNDLE_WITHOUT=development:test

ADD ./bin $INSTALL_PATH/bin
COPY Gemfile Gemfile.lock ./
RUN bin/bundle install --deployment

ADD . $INSTALL_PATH

기존과의 차이점은 BUNDLE_FROZEN 을 이용해서 더이상 Gem변경을 허용하지 않으며,
BUNDLE_DISABLE_SHARED_GEMS 설정으로 번들 path를 고정하고,

BUNDLE_WITHOUT 을 이용해서 오직 deployment 환경을 대상으로만 bundle 을 관리합니다.

Conclusion

이런 형태로 사용한다면 docker 로 변경된 내용을 배포할 때 마다 bundler 때문에 시간이 소모되는 문제를 쉽게 해결 가능합니다.

Rails 5 lib folder 로딩이 안되는 문제

Rails 5 ‘lib’ folder autoload failure

Rails 5 에서 lib 폴더를 autoload path에 포함시키고 싶은데 아래 코드가 제대로 동작을 하지 않았습니다.

config.autoload_paths << Rails.root.join('lib')

첫 번째 방법

찾아보니 스택오버플로우에 아래와 같은 정보가 있습니다.

autoload – Rails 5: Load lib files in production – Stack Overflow

코드를 보면 initializer를 이용해서 rb 파일들을 읽어오도록 구현되어 있습니다.

이런식으로 원하는 코드들만 가져와도 될 듯합니다. 스타도 많이 받았습니다. ㅎㅎㅎㅎ

두번째 방법

Rails falls back on non-thread-safe autoloading even when eager_load is true · Issue #13142 · rails/rails · GitHub

위의 글을 보면 이 아저씨가 해결한 방법은 autoload 를 사용하지 않고 eager_load 를 사용하라고 합니다.

config/environments/production.rb 의 내용을 봅니다.

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both threaded web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

eager_load 가 기본 설정입니다.

config/application.rb 하단에 아래 내용을 추가합니다.

config.eager_load_paths << Rails.root.join('lib')

문제 없이 잘 동작합니다.

Postgresql 명령어 정리

Postgresql 의 명령어를 간단히 정리해보겠습니다.

항상 잊어버리는 명령어를 기록해두기위한 차원입니다.

console 접속

$ psql database_name

접속 종료

-# \q

database list

-# \l

database create

CREATE DATABASE sentry WITH ENCODING='UTF8' OWNER=postgres;

database select

-# \c database_name

사용자 목록 표시

-# \du

Role 생성

-# CREATE ROLE <role name> WITH LOGIN;

Role 추가

ref: PostgreSQL: Documentation: 8.1: ALTER ROLE

-# ALTER ROLE <role name> WITH LOGIN CREATEDB;

Column 추가

phone 컬럼 추가: not null, default 값은 false

database_name-# ALTER TABLE users ADD COLUMN phone boolean not null default false;

Column 삭제

database_name-# ALTER TABLE users DROP COLUMN phone;

Constraint 추가

ALTER TABLE app_config
    ADD CONSTRAINT ukey_app_config_app_id UNIQUE (app_id);

Constraint 삭제

ALTER TABLE app_config
    DROP CONSTRAINT ukey_app_config_app_id;

table list

database_name-# \d

현 database의 모든 index list

database_name-# \di 

특정 테이블 정보 보기

users 테이블 정보 보기

database_name-# \d users

database dump

pg_dump 데이터베이스명 > 파일명.dump

$ pg_dump -Fc dbname > outfile

database restore

$ pg_restore --clean database_name my.dump

상세

  • —clean: database를 깨끗히 날리고 새로 생성
  • —no-owner: 소유자 정보는 복원할때 포함하지 않음
  • -h: host name
  • -U: user name
  • -d: database name
$ pg_restore --verbose --clean --no-owner -h localhost -U postgres -d database_name my.dump

sql file execute

  1. Shell
$ psql -U username -d myDataBase -a -f myInsertFile
  1. cli
\i path_to_sql_file

iptables 명령어

iptables 명령어

현재 목록 확인

$ sudo iptables -L

규칙 추가

$ sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

설명: 들어오는 패킷이 127.0.0.1 의 아이피를 가지고 있고 protocol 이 icmp 면 버려라.

 

번호 확인

$ sudo iptables -L --line-numbers

삭제

$ sudo iptables -D INPUT 3

#iptables #command

Docker machine for Mac 에서 no space left on device

Docker machine for Mac 에서 no space left on device

오늘은 Docker를 Mac에서 사용할 때 격는 문제에 대해 정리합니다.

 

Prerequisite

  • Docker version 17.03.1-ce
  • Docker-machine version 0.10.0

 

저는 Docker toolbox 를 이용하고 있으며, Docker for Mac 과 의 차이점에 관련된 내용은 여기서 참고하시면 됩니다.

Problem

Docker 이미지 빌드 중에 이런 메시지를 만났습니다.

failed to register layer: Untar re-exec error: exit status 1: output: write /home/oracle/app/oracle/oradata/oracle/users01.dbf: no space left on device

no space left on device

틀림없이 제 맥북은 용량이 많이 남아있습니다.

Solution

Docker-machineVirtualBox 를 이용해서 docker를 실행합니다.
이에 docker가 실행되는 환경 접속을 하려면 별도의 명령이 필요합니다.

$ docker-machine ssh

이제 도커가 돌고 있는 가상 환경으로 들어왔습니다.

디스크 용량을 확인합니다.

$ sudo df -h
...
/dev/sda1 20.0G 19.9G 0.1G 99% /mnt/sda1/var/lib/docker/aufs
...

저 녀석이 꽉차 있습니다.

그냥 docker-machine의 가상머신 환경을 날리고 용량을 크게 다시 만듭니다.

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.101:2376 v17.06.0-ce

default를 날립니다.

$ docker-machine rm default

이제 disk size 를 새로 지정합니다. 여기서는 80G 로 만듭니다.

$ docker-machine create --driver virtualbox --virtualbox-disk-size "80000" default

이 전 과정을 반복해서 용량을 확인합니다.

$ docker-machine ssh
$ sudo df -h

변경이 완료되었습니다.