2015년 11월 12일 목요일

mac에 rbenv 사용해서 ruby 개발환경 세팅하기

사실 mac에는 원래 ruby가 설치되어 있는데 이것 때문에 문제가 생길 때가 있다.
최근에 Gitlab 관련한 소스를 만질때가 많은데
bundle install 을 하면 gem 을 설치할때 꼭 한두개씩 error를 내뱉는다.
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
정확한 이유는 파악하지 못했지만 이런 경우 rbenv를 사용해서 ruby를 설치하면 이런 문제가 잘 발생하지 않는다.
gitlab-development-kit에서도 이런 내용을 가이드 하고 있다.
Ruby 2.1.6 installed with a ruby version manager (RVM, ruby-build, rbenv, chruby, etc.), DO NOT use the system Ruby
mac에서 rbenv 설치는 굉장히 간단하다.
자세한 내용은 https://github.com/sstephenson/rbenv 여기 있다.

1. brew를 사용해서 설치

$ brew update
$ brew upgrade rbenv ruby-build

2. .bash_profile 수정

 eval "$(rbenv init -)"
위의 한 줄만 추가하면 된다.

3. ruby 설치

# list all available versions:
$ rbenv install -l

# install a Ruby version:
$ rbenv install 2.0.0-p247

# 인스톨후 이 명령어를 실행 해준다.
$ rbenv rehash

# Global로 설정하고 싶은 경우.
$ rbenv global 2.0.0-p247

2015년 8월 21일 금요일

mac에 vim 제대로 설치하기

사실 mac에는 기본적으로 vim이 설치되어 있다.
하지만 ruby나 python을 사용하는 플러그인을 설치할때 에러가 난다.
예를 들면 내가 좋아하는 자동완성 플러그인 YouCompleteMe 을 사용하지 못한다.

1. 소스 다운로드

소스는 github에서 다운 받는다.
https://github.com/vim/vim

2. 소스 컴파일

./configure --prefix=/usr/local/ \ --enable-rubyinterp \ --enable-pythoninterp \ --with-features=huge
make && make install
(permission error 가 발생하면 sudo를 붙여준다.)

3. .bash_profile 파일 수정

export EDITOR="vim"
alias vi="/usr/local/bin/vim"

2015년 8월 20일 목요일

mac에 brew install 사용해서 postgresql 설치하기

brew를 업데이트 하고 postgres를 install

brew update
brew install postgres

PostgreSQL 서버를 시작

postgres -D /usr/local/var/postgres 


DB를 생성하고 접속

createdb `whoami`
psql


실행중인 Virtualbox vm에서 포트 포워딩 설정하기

Mac에서 docker를 사용하다 보면 vm 기반이라 불편한게 좀 많은데
그 중 하나가 포트 포워딩 설정이다.
아래 명령어를 사용하면 실행중인 vm의 포트포워딩 설정을 변경할 수 있다.

VBoxManage controlvm "boot2docker-vm" natpf1 "tcp-port8888,tcp,,8888,,8888";

2015년 8월 19일 수요일

Git push 할때 HTTP code = 403 fatal: The remote end hung up unexpectedly 에러 날때

이런 경우 일단 shallow clone 인지 확인해봐야 합니다.
(shallow clone 은 맨 처음 clone 할때 전체를 받아오지 않고
depth 옵션을 주어서 history 일부분만 가져오는 것을 말합니다.)
git log
위의 명령어를 치면 history가 나오는데 그걸 보고 확인합니다.
만약 shallow clone 이면 이렇게 push 가 안되고 에러가 나는 경우가 있습니다.
이때 해결책은 기존 git 정보를 지우고 다시 init 을 하면 됩니다.
rm -rf .git
git init
git add .
git commit
git remote add origin <git repository url>
git push origin master

2015년 7월 30일 목요일

협업의 기술 part1


회사 동료가 이 책이 정말 좋다고 소개를 해줘서 읽게 되었다.
서문에 보면 이 책의 기본적인 아이디어가 나오는데 공감이 많이 되었다.
소프트웨어를 작성하는 것은 팀 스포츠이며, 기술적인 요소만큼이나 인간적인 요소에도 큰 영향을 받는다.

자존심 버리기


나도 자존심이 강한 편인데 개발자들의 경우 특히 그런 케이스가 많은것 같다.
자신이 항상 가장 중요한 사람인 것처럼 행동하는 사람과 일하고 싶은 사람은 아무도 없다. 설령, 논의에 참여한 사람 중 본인이 가장 똑똑한 사람이라고 할지라도 결코 이를 내세워서는 안 된다.
회의 할때 의사결정이 필요한 경우가 많은데 내가 낸 의견이 채택되지 않는 경우 마음이 불편해질때가 생각났다. 좀더 겸손해질 필요가 있는것 같다.

학습을 위한 시간을 아끼지 마라


슈퍼스타 개발자라고 하더라도 어느 순간 뒤쳐지고 있을수 있다.
어떤 집단에서 가장 지식이 풍부한 사람이 되는 것은 재미 있는 일이다. 그리고 다른 사람의 멘토가 됨으로써 많은 보상이 따르기도 한다. 문제는 팀 내에서 최상의 위치에 오르면 학습을 멈추게 된다는 점이다.

주변으로 부터 영향을 받아들여라


모르는것을 모른다고 얘기할 수 있는 용기를 말한다.
매우 완고한 사람과 함께 일하게 될 수도 있다. 많은 사람이 그를 설득하려고 해도 그는 늘 그랬듯이 완강하게 버틴다. 사람들은 그를 외면하고 그 주변만 맴돌 것이다.
주변에 도움을 청하는 것을 자주 해야 좋은것 같다.
누군가 나에게 도움을 요청했을 때를 생각해보면
누군가 나를 필요로 한다는 사실에 기쁜 마음이 들고
내가 문제를 해결해줄 수 있었을때 자기효능감으로 뿌듯한 마음이 생긴다.
내가 다른 사람에게 도움을 요청함으로써 이런 좋은 영향을 줄 수 있다고 생각한다.
당신이 실수했음을 인정하는것은 장기적으로 당신의 위상을 높이는 일이다. 겸손을 대외적으로 표현하는 동시에 당신이 다른 사람의 의견을 믿는다는 표현이다. 그 결과 사람들은 당신의 솔직함과 강건함을 존중하게 된다.

2015년 6월 3일 수요일

mac 에서 bootdocker start 실행할때 docker@localhost's passwored: 이런 메세지 나오는 경우

이게 boot2docker 버전 문제인지 최신 버전을 설치했더니 이런 에러가 발생했다.
해결방법은

1. .ssh/id_boot2docker.pub 파일의 내용을 복사 해둔다.
2. boot2docker ssh 로 접속. 패스워드는 tcuser
3. ~/.ssh/authorized_keys 파일을 열고 아까 복사해놓은 텍스트를 추가.
4. 밖으로 빠져나가서 다시 boot2docker start 하니 잘 동작한다!

2015년 3월 12일 목요일

ruby로 ssh 접속해서 원격으로 커맨드 실행시키기

서버에 명령어를 날릴때 보통 ssh를 이용하는데
ruby 스크립트를 이용해서 자동화 할 수 있다.

https://github.com/sosedoff/net-ssh-session

위의 gem을 사용하면 편리하다.
ruby에서 기본적으로 제공하는 net-ssh 의 경우 커맨드를 날릴때마다
세션 유지가 안되서 좀 불편하다.
예를 들어서 cd 로 디렉토리를 변경하고 ls를 해도 home 디렉토리의 파일이 리스팅 된다.

사용법은 readme가 워낙 잘 되어 있어서 간단하게만 설명하면
gem install net-ssh-session
위의 명령어로 gem을 설치하고
require 'net/ssh/session'

# Initialize a new connection
session = Net::SSH::Session.new(host, user, password)

# Connect to server
session.open

# Execute a remote command
result = session.run("ls")
이런 식으로 사용하면 된다.


2015년 3월 11일 수요일

vim 에서 html 작성할때 굉장히 편리한 플러그인 emmet-vim

그동안 vi에서 html 작성할때마다 너무 귀찮다는 생각을 했었다.
레일즈 개발할때는 haml을 사용해서 괜찮았는데...
그래서 오늘 검색을 해보다 알게된 플러그인이 있는데
사용해보니 생각보다 훨씬 편리했다.

이름은 emmet 이고 주소는 https://github.com/mattn/emmet-vim
나는 vundle을 사용해서 .vimrc 파일에

Plugin 'mattn/emmet-vim'

위에 처럼 한줄만 추가하면 설치가 된다.

간단히 말하면 css selector 문법처럼 쓰고 단축키로 ctrl + y + , 를 누르면 html 태그가 생성된다.
예를 들어서

div#page>div.logo+ul#navigation>li*5>a

위와 같이 입력하고 단축키를 누르면 아래 코드가 생성된다.

2015년 3월 8일 일요일

이클립스 플러그인 설치할때 'unable to find valid certification path to requested target' 에러 나는 경우

이번에도 회사 프록시 서버 때문에 생기는 문제다.

1. 회사 인증서를 java keytool을 사용해서 import

자바가 C:\Program Files\Java\jdk1.7.0_75 여기에 설치되어 있다고 하면
keytool은 bin 디렉토리에 있다.

$ keytool -import -alias proxy
   -file Example.cer
   -keystore C:\Program Files\Java\jdk1.7.0_75\jre\lib\security\cacerts

비밀번호를 새로 설정해준다.

2. 이클립스 설정파일에 추가

이클립스가 설치된 위치에 보면 eclipse.ini 파일이 있는데 이 파일을 열고

-Djavax.net.ssl.trustStore=C:\Program Files\Java\jdk1.7.0_75\jre\lib\security\cacerts
-Djava.net.ssl.trustStorePassword=changeit

위의 코드를 추가한다.
패스워드 부분은 위에서 새로 설정한 패스워드를 넣어준다.

이제 이클립스를 새로 시작하면 플러그인 설치가 잘 될것이다.

2015년 3월 5일 목요일

Vim as an IDE

Vim as an IDE(https://github.com/jez/vim-as-an-ide)

이 프로젝트는 2015년 2월 25일 카네기 멜론대에서 있었던 테크 토크를 통해서 시작되었다고 합니다. 한 학생이 과제를 하기 위해 vim을 사용했는데 아무래도 사용하기 쉬운 툴은 아니니 익히는데 몇가지 어려움들이 있었나 봅니다.
  1. vim 의 단축키를 이용해서 텍스트 편집하기
  2. 다양한 플러그인 설치해서 사용하기

사용 방법

샘플 vimrc 파일이 들어있는데 단계별로 수정하면서 vim이 어떻게 달라지는지 보여준다고 합니다. 그래서 first commit 부터 시작해서 각 commit 정보를 확인해보라고 하네요. Table of Content를 보니 저도 vim을 사용하면서 하나 하나 익혔던 순서가 그대로 나오네요! 처음에 vimrc 파일을 만들고 일반적인 설정을 추가하고, 플러그인 매니저를 사용하고, 파일 탐색기를 추가하고...

정리

맨 처음 vim을 접하면 그대로는 사용하기 힘들고 이것저것 설정하는 게 좀 귀찮을 수도 있는데요. 이 프로젝트가 딱 그 부부을 가이드 해주는 것 같습니다. 일을 하다보면 터미널에 접속해서 vim을 사용해야 하는 경우가 있는데요. 이번 기회에 vim 사용법을 배워두는 것도 좋을것 같습니다.

2015년 2월 24일 화요일

websocket을 사용해서 콘솔의 STDIN/OUT을 브라우저로!

websocketd 소개

https://github.com/joewalnes/websocketd

이거 참 아이디어가 좋아보이는데요.
콘솔에서 사용하는 프로그램의 STDIN/STDOUT을 websocket을 통해서 웹브라우저에서 볼수 있도록 해주는 유틸입니다.

잘 생각해보면 활용방안이 많을 것 같습니다.
간단한 예제로는 1 부터 10까지 카운트하는 쉘스크립트를 짜서 웹브라우져에서 결과를 볼수 있는 예제가 있구요.
프로젝트 README 파일에 보면 vmstat 정보(시스템 사용량)를 웹브라우저를 통해서 이쁘게 볼수 있는 예제가 나와있습니다.
실행해보면 실시간으로 그래프가 변하는데
웹소켓을 통한 스트리밍이라 데이터를 저장할 필요도 없고 참 좋은것 같습니다.

2015년 2월 12일 목요일

JuiceSSH 와 Nitrous 사용해서 핸드폰으로 코딩하기

안드로이드용 앱인 JuiceSSH는 핸드폰으로 ssh 접속을 가능하게 해준다.
이걸 이용하면 자신의 nitrous box에 접속해서 자유롭게 개발이 가능하다.

1. ssh 키 생성

먼저 nitrous에 자신의 box가 있다고 가정을 하고
ssh로 접속하려면 ssh key를 생성하는 작업이 필요하다.
리눅스나 맥에서 ssh-keygen 을 사용하면 간단하게 생성이 가능하다.

2. nitrous 에 public key 등록

https://www.nitrous.io/app#/public_keys
위의 주소로 들어가서 자신이 생성한 public key를 등록해준다.

3. private key를 JuiceSSH에 등록

JuiceSSH를 실행하고 Connections로 들어가면
몇가지 메뉴가 나오는데 그중에 Identities로 들어가서 +를 누른다.
Nickname은 아무거나 지정하고 Username의 경우 Nitrous에서 확인한다.

https://www.nitrous.io/app#/boxes 에 접속하면
SSH URIssh://action@apne1.nitrousbox.com:23435
ssh:// 뒤에 action 이 아이디에 해당한다.

Private Key는 아까 생성한 private key를 이메일을 통해 전달해서 복사해 넣는다.

4. JuiceSSH에서 Connection 생성

마지막으로 Connection 메뉴로 가서 + 버튼을 누른다.
Address는 위의 예제에서 apne1.nitrousbox.com 이고
Identity는 아까 생성한 걸로 선택 port는 23435.

이제 핸드폰으로 접속을 해보면 된다.
키보드는 딩굴 키보드 앱을 추천하고 
JuiceSSH에서 tab이나 ctrl같은 기능키를 화면에 제공해주기 때문에
자동완성을 이용하면 은근 개발 할만한것 같다.

소스코드에서 키워드를 추출하는 툴 code-words 소개

소스코드에서 키워드를 추출할 일이 생겨서 구글링을 하다 괜찮은 프로젝트를 발견했다.
https://github.com/npryce/code-words

맨처음 mac에서 테스트 해봤을때는 이상하게 동작해서 이게 뭐지?? 이랬었는데
Readme 파일을 잘 읽어보니 linux에서 제대로 동작 한다고 한다.

C 부터 java, ruby, python, javascript, scala 심지어 Haskell 까지 많은 언어를 지원한다.
나는 java로 된 프로젝트로 테스트를 해보았는데 java의 키워드나 primitive type들을 알아서 처리해주고 필요한 경우 따로 추가해줄 수도 있다.
stop words도 지정해서 불필요한 단어는 제외해줄 수도 있다.

참고로 맨 마지막 파이프에 wordcloud 를 사용하면 위와 같이 태그 클라우드를 이미지 파일로 생성해주고
word-count 를 사용하면 단어별로 카운트를 해준다.

리눅스에서 파이프를 이용하면(소스를 git log 에서 불러온다든지) 다양한 조합이 가능해진다.

2015년 2월 9일 월요일

boot2docker 사용시 프록시 설정 방법

사내에 프록시 서버가 있는 경우 아래와 같은 설정이 필요하다.


* docker 이미지 접속


$ boot2docker ssh
$ sudo vi /var/lib/boot2docker/profile

* 파일을 열고 아래 내용 추가


export HTTP_PROXY=http://your.proxy.name:8080
export HTTPS_PROXY=http://your.proxy.name:8080

* 회사 인증서 파일을 ca-certificate.crt 에 추가


$ cat ca.pem >> /etc/ssl/certs/ca-certificates.crt

* docker 서비스 재시작


$ /etc/init.d/docker restart

2015년 2월 8일 일요일

boot2docker init 할때 x509: certificate signed by unknown authority 문제로 iso 파일 다운로드 못할때 해결 방법

mac에서 docker를 사용하려면 boot2docker를 설치해야한다.
패키지가 제공되어 간단히 설치는 할 수 있는데
설치 후 작업할때 에러가 발생했다.

$ boot2docker init

Latest release for boot2docker/boot2docker is v1.4.1
Downloading boot2docker ISO image...
error in run: Failed to download ISO image: Get https://s3.amazonaws.com/github-cloud/releases/14930729/3de263a4-853f-11e4-9f2b-59bd5ac8d5f3.iso?response-content-disposition=attachment%3B%20filename%3Dboot2docker.iso&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1423443118&Signature=h%2Fqa9MUAcDPQYFnNsNBDDV2Rh%2Fc%3D: x509: certificate signed by unknown authority

사내에 프록시 서버가 있는 경우는 이런 에러가 많이 발생 할것 같다.
이런경우 침착하게 wget 으로 iso 파일을 다운 받으면 된다.

$ cd ~/.boot2docker
$ wget https://github.com/boot2docker/boot2docker/releases/download/v1.4.1/boot2docker.iso --no-check-certificate

iso 파일 디폴트 경로는 ~/.boot2docker/boot2docker.iso 이다.
이렇게 해주고 다시하면 정상적으로 동작한다.

$ boot2docker init


crontab 사용시 주의사항

오늘 crontab으로 DB 백업 설정을 하다가
이 문제로 삽질을 해서 간단하게 정리해보았다.

내가 작성한 스크립트는 간단하게

mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql

이렇게 되어있었다.
당연히 스크립트를 그냥 실행했을때는 잘 동작하였고

매일 새벽 1시에 돌게 하려고 crontab에 아래와 같이 등록하였다.

00 01 * * * /Users/mickey/projects/screencast/backup.sh

그런데 나중에 확인해보니 백업 파일 사이즈가 전부 0 이었다!!
당황스러워서 이것저것 구글링을 해보면서 삽질을 하다가
stackoverflow에서 힌트를 찾았다.

http://stackoverflow.com/questions/4995689/mysqldump-creates-empty-file-when-run-via-cron-on-linux

이걸 보면 스크립트 뒤에 2>&1 이걸 붙여서 로그를 확인해보라고 되어있었다.
역시 에러가 날땐 로그를 확인해봐야 하는데 나는 그냥 삽질만 하고 있었다...
그래서 위의 스크립트를 수정해서

mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql 2>&1

이렇게 하고 돌렸더니 백업 파일에 에러 로그가 나왔다.
mysqldump 파일을 못찾는다는 에러였다.

그냥 bash 에서는 path에 설정이 되어 있어서
잘 동작하였지만 crontab으로 돌릴때는 path 설정이 안 먹히는것 같다.
그래서 아래와 같이 full path로 수정하니 잘 동작하였다.

/usr/local/bin/mysqldump -uroot screencast > /Users/mickey/backup/$(date +%Y-%m-%d).sql

오늘의 교훈은..

1. 에러가 날땐 로그를 잘 확인하자.
2. crontab으로 돌릴때 안전하게 full path를 다 써주자.

2015년 2월 7일 토요일

웹기반 프리젠테이션 툴 reveal.js editor 소개

요즘 발표자료를 작성할때 뭘로 만들까 고민을 하다가 reveal.js를 쓰기로 했다.
파워포인트로 작성하면 회사에서는 암호화 돼서 공유하기도 않좋고
웹에서 바로 보여주기도 힘들어서 괜찮은 웹기반 툴을 찾고 있었다.

reveal.js를 사용한 온라인 에디팅 사이트도 있는데
http://slides.com/ 이다.
정말 깔끔하게 잘 만들어진 사이트라서 좋았는데
회사에서 이 사이트를 또 막아버렸다.

github에서 찾아보니 설치형으로 만들어진 에디터가 있다.
https://github.com/sunu/reveal-editor
일단 star를 하나 주고 한번 사용해보기로 했다.

로컬에 깔아서 실행해보니
아직 reveal.js의 모든 기능을 다 지원 하는것 같지는 않지만
간단하게 작성하기에는 충분한 것 같다.
앞으로 회사에서는 이걸 사용해야겠다.
필요한 기능이 있으면 공부할 겸 추가해봐도 좋을것 같다.


2015년 2월 2일 월요일

윈도우용 vim 사용시 클립보드로 복사하기

윈도우에서도 간단한 텍스트 에디터로 gVim을 설치해서 사용하고 있었는데
이게 yy 같은 명령어를 사용해서 한줄 복사해도
윈도우 클립보드에 들어가지는 않아서 불편했었다.

검색을 해보니 설정파일에 아래와 같이 추가하니 잘 동작한다.

set clipboard=unnamed

Discover Meteor 를 다 읽고 느낀점

처음에는 meteor가 단순히 프로토타입 용도로만 쓸만 할거라고 생각 했었는데
이 책을 다보고 나서는 생각이 바뀌었다.
충분히 production 환경에서도 쓸 수 있을것 같다.

특징들을 간단히 정리해 보면

1. Client side mongo db

가장 큰 특징은 client side에도  mongo db(mini mongo)가 떠 있어서
데이터가 서버와 동기화 된다는 것이다.
따로 서버와 데이터를 주고 받는 로직이 필요 없기 때문에
처음에 프로토타이핑 할때 굉장히 편하다.
하지만 데이터가 커지면 어떻게 하나 했는데
책에 보면 publication, subscription 모델을 이용해서 해결한다.

2. Reactivity

그리고 맘에 드는 부분중에 하나는 Reactivity(반응성) 이다.
이게 미티어에서 잘 제공해주는 것중의 하나인데
데이터가 변경되면 화면에 리프레쉬 없이 바로바로 반영을 해준다.

3. Template

화면을 템플릿 단위로 분할하여 코드가 굉장히 깔끔해진다.
템플릿은 보통 html 과 js 파일로 구성한다.

4. 대기시간 보정(Latency Compensation)

이게 처음에 봤을때 좀 신기한 부분이었는데
데이터의 변경이 있을때 클라이언트에서는 일단 바로 반영하고
나중에 서버의 결과를 받아서 업데이트 하는 방식이다.
이렇게 해서 웹앱의 반응성을 끌어올릴수 있다.

5. 패키지 시스템

meteor 에서 제공해주는 패키지도 편리하게 사용할 수 있도록 잘 해놓았고
https://atmospherejs.com/ 이 사이트에 들어가면
다른 개발자들이 제공해주는 다양한 패키지들을 이용할 수 있다.
무엇보다도 패키지를 가져다 사용하는게 정말 코드 한줄만 추가하면 되는 방식이라 편하다.

6. 결론

일단 meteor로 개발을 하면 재미있다.
코드 변경사항이 웹브라우저를 리프레쉬 할 필요없이 바로바로 반영되며
데이터의 변경사항도 화면에 바로바로 반영된다.
자기가 구상 서비스를 프로토타이핑 해보고 싶을때는 정말 좋을것 같고
production도 불가능하지 않다는 생각이 든다.
물론 나중에가면 scale out 방안 같은걸 고민해 봐야겠지만..
처음에 외부 자바스크립트 라이브러리를 추가하는 것때문에 좀 고생을 했었는데
그건 http://yms9654.blogspot.kr/2015/01/meteor-javascript-library.html 여기에 간단히 정리를 했다.
책도 한글판이 온라인에 공개되어 있다.
http://kr.discovermeteor.com/

2015년 1월 29일 목요일

git repository 에서 키워드 검색하는 루비 스크립트

오늘 git repository 전체에서 키워드 검색을 할 필요가 생겨서 루비로 스크립트를 작성해보았다.
git log 명령어에 생각보다 다양한 옵션이 많아서 그걸 사용했다.
  • --no-pager 는 git log가 기본으로 more 처럼 동작하기 때문에 추가했고
  • --since는 기간을 설정할 수 있고
  • -G를 사용하면 커밋한 코드에서 검색할 수 있다.
  • -- 옵션 뒤에 파일 타입을 정의 한다.
gitlab 서버에서 동작하는 스크립트이며 모든 네임스페이스와 프로젝트를 검색한다.
아래 코드는 'upload'라는 키워드로 java 파일에서 검색하는 예제.

2015년 1월 28일 수요일

Meteor 에서 외부 javascript library를 추가하는 방법

이것 때문에 삽질을 많이해서 정리를 한번 해보았다.

1. <head> 안에 들어가는 js 인 경우

보통은 client/lib 안에 넣으면 되고 global 변수를 사용하는 경우는 client/lib/compatibility 에 넣으면 된다고 함.

2. html이 다 로드 되고 나서 불러야 하는 경우

먼저 external-file-loader를 추가한다.

$ meteor add mrt:external-file-loader

main.js 같은 곳에 아래 코드를 추가

3. 마지막으로 특정 페이지에서만 필요한 경우

이 경우 일단 router 설정이 되어 있어야 한다.

wait-on-lib를 추가

$ meteor add manuelschoebel:wait-on-lib

router.js 수정

putty 에서 생성한 키파일로 ssh 로그인 안될때

putty와 openssh에서 사용하는 public key 포맷이 약간 달라서 생기는 문제인것 같다.

putty에서 생성한 public key는

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20141215"
AAAAB3NzaC1yc2EAAAABJQAAAQEApY5pbRYtPoHQ1F8WzOWIz3DB+ki3oU2gXssc
9+W5K/4SQnduNZjoAI07MmLLUYhrDaypHkU3Xc/td7VwRnhjy8bSfevx1fXrGNBS
rSVQc37svHTGBXLIM9hcnP6i7xudvK870PnDzom3NeDYi0v8iIywzn8GSvt0d+1R
KxiqW63WnPTOnP2j/4yipeqcTVIOvSWZi/pbnry9HoKugoP1BH2/zQH5GbpM/n3+
DUeZarbs5btT1v3aSmNlyk+XKY9AZM5SPCKTkbM04EbvcwBeY+z9EWdh2zyok1zh
ACegGM2k+BBB5lCFst503DNNylpAhCroPeS8Icmu3SFO/D4wZQ==
---- END SSH2 PUBLIC KEY ----

이런식으로 생성되는데
이걸 그대로 서버에 저장하고 ssh 로그인 하려고 하면 Server refused our key 이런 메세지가 나오면서 자동 로그인이 안된다.

해결방법은 아래와 같은 포맷으로 변경해서 저장하면 된다.

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEApY5pbRYtPoHQ1F8WzOWIz3DB+ki3oU2gXssc9+W5K/4SQnduNZjoAI07MmLLUYhrDaypHkU3Xc/td7VwRnhjy8bSfevx1fXrGNBSrSVQc37svHTGBXLIM9hcnP6i7xudvK870PnDzom3NeDYi0v8iIywzn8GSvt0d+1RKxiqW63WnPTOnP2j/4yipeqcTVIOvSWZi/pbnry9HoKugoP1BH2/zQH5GbpM/n3+DUeZarbs5btT1v3aSmNlyk+XKY9AZM5SPCKTkbM04EbvcwBeY+z9EWdh2zyok1zhACegGM2k+BBB5lCFst503DNNylpAhCroPeS8Icmu3SFO/D4wZQ==

앞에 ssh-rsa 를 붙이고 키파일 내용을 한줄로 만들어야 한다.
만약 이렇게 변경해도 같은 에러 메세지가 나온다면

$ chmod 600 authorized_keys