페이지

2014년 12월 29일 월요일

Rails 프로젝트의 Ruby 버전 변경방법

ruby-2.0.0 에서 ruby-2.1.1 로 바꾸는 과정


$rvm install ruby-2.1.1
$rvm use ruby-2.1.1

Gemfile edit
ruby '2.1.1'

$bundle

2014년 12월 19일 금요일

Heroku에 Ruby on Rails App 배포하기

이번 포스팅에서는 레일즈 앱을 Heroku에 배포하는 과정을 정리해보겠습니다.

https://www.heroku.com/

앞서 필요한것들

  • Heroku 계정
  • Ruby 설치
  • Bundler 설치 - gem install bundler

헤로쿠 툴벨트 다운로드 및 설치

사이트에서 운영체제에 맞는 헤로쿠 툴벨트를 다운로드하고 설치합니다.
Download Heroku Toolbelt for Mac OS X

터미널 혹은 커맨드창에서
$heroku --version
입력해서 버전이 출력되면 제대로 설치된 것입니다.

헤로쿠 로그인

$heroku login
이메일과 암호를 입력하여 로그인을 합니다.

Git 등록 및 Heroku 생성

헤로쿠로 배포하기위한 앱 디렉토리로 이동합니다.
앱은 git에 등록되어 있어야 합니다.
되어있지 않다면 아래와 같은 과정을 거쳐야합니다.
$git init
$git add -A
$git commit -m 'init'

이제 헤로쿠에 앱을 만들고 현재 로컬 디렉토리의  git에 원격저장소 heroku 정보를 추가합니다.
$heroku create
Git remote heroku added 와 같이 출력되면 정상입니다.
만약 출력되지 않는다면 git 등록을 빼먹지 않았는지 확인해보세요.

$git config -e 
하여 [remote "heroku"]와 같이 heroku 가 추가되어있는지 확인해봅니다.

Heroku로 배포

이제 git 을 이용하여 로컬저장소에 커밋된 내용을 원격저장소 heroku의 master로 push합니다.
$git push heroku master

heroku에서 처리되는 내용이 출력되는데요. 에러나 경고가 나타날 수 있습니다.
이에 관해 알아보겠습니다.

sqlite3 비활성화

헤로쿠에서는 sqlite3를 사용하지 못하는듯 합니다. 기본 데이터베이스로 postgresql을 사용하므로 이에 맞도록 Gemfile 을 수정해 주어야 합니다. ( 데이터베이스 적용은 하단에서 )

group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
gem 'rails_12factor' 
end

Include 'rails_12factor' gem to enable all platform features
=> gem 'rails_12factor'
ruby 버전을 명시하지 않았다는 경고
=> ruby '2.0.0' # 사용중인 버전

이 외에도 다른 경고가 나올때는 참고 URL이 나오므로 확인해봅니다.

이와같이 로컬에서 수정한 내용은 반드시 git commit 해야 git push heroku master시 반영됩니다.
Gemfile 을 수정한 경우에는 bundle install 을 먼저 실행한 후에 git add, commit, push 순서로 하여야 합니다.

별문제없이 배포가 완료되면 메시지 끝부분에
https://앱이름.herokuapp.com/
와 같은 주소가 출력됩니다. 이 주소를 브라우저에서 확인해봅니다.
$heroku open 
명령을 실행하면 기본 브라우저로 사이트를 확인할 수 있습니다.

$heroku logs --tail
명령을 실행하면 실시간으로 로그를 확인할 수 있습니다.

$heroku run rails console
명령을 실행하면 콘솔을 실행할 수 있습니다.

데이터베이스에 관하여

$heroku config
$heroku pg
명령으로 데이터베이스 정보를 확인할 수 있습니다.

config/database.yml 을 열어서 production: 파트를 다음과 같이 수정합니다.
production:
  adapter: postgresql
  encoding: unicode
  pool: 5

커밋, heroku 로 push 합니다.
디비를 반영하고 결과를 확인합니다.
$heroku run rake db:migrate
$heroku pg

그 외에 확인해 볼것들

  • Procfile 정의
  • 스케일 변경
  • Provision add-ons




2014년 12월 18일 목요일

VB.NET JSON 처리 ( Newtonsoft.json 이용 )


패키지 관리자 콘솔에서 Newtonsoft.json을 설치해줍니다.
install-package Newtonsoft.json
(참고:visual studio 에서 package manager console ( install-package ) 사용하는 방법)

필요한 패키지를 임포트합니다.
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq

json 문자열을 준비합니다. (vb 에서는 문자열 안에 큰따옴표 넣기위해 큰따옴표를 두번입력합니다.) json 문자열을 파싱하여 개별 항목값을 읽어봅니다.
Dim jsonString As String = "{""id"":1,""name"":""홍길동""}"
Dim jsonObject As JObject = JObject.Parse(jsonString) 'Object 만 파싱 한다.
Console.WriteLine("id:" & jsonObject.SelectToken("id").ToString)
Console.WriteLine("name:" & jsonObject.SelectToken("name").ToString)
직렬화 기능을 이용해 봅니다.
json 구조에 대응되는 클래스를 준비합니다.
Public Class Name
    Public Property id
    Public Property name
End Class

변환합니다.
Dim jsonString As String = "{""id"":1,""name"":""홍길동""}"
Dim onename As Name = JsonConvert.DeserializeObject(Of Name)(jsonString)
Console.WriteLine("id:" & onename.id)
Console.WriteLine("name:" & onename.name)

json 배열로 되어있는 데이터를 변환합니다.
Dim jsonString As String = "[{""id"":1,""name"":""홍길동""},{""id"":2,""name"":""임꺽정""}]"
Dim nameList As List(Of Name) = JsonConvert.DeserializeObject(Of List(Of Name))(jsonString)
For Each onename As Name In nameList
    Console.WriteLine("id:" & onename.id)
    Console.WriteLine("name:" & onename.name)
Next
객체를 문자열로 변환합니다.
Console.WriteLine(JsonConvert.SerializeObject(nameList(0)))

참고링크


visual studio 에서 package manager console ( install-package ) 사용하는 방법

visual studio 에서 package manager console ( install-package ) 사용하는 방법



아래와 같이 install-package 원하는패키지명 을 입력합니다.

아래와 같이 설치 진행을 확인할 수 있습니다.



참고링크

http://docs.nuget.org/docs/start-here/using-the-package-manager-console

VB.NET 날짜 시간 관련 코드 조각 ( DateTime )

1.
TextBox1.Text = DateTime.Now.ToShortTimeString '오후 12:54
TextBox1.Text = DateTime.Now.ToLongTimeString '오후 12:54:30

2.
Dim oldTime As DateTime
oldTime = DateTime.Now

While True
    Dim millis = (DateTime.Now - oldTime).TotalMilliseconds
    Console.WriteLine("millis:" & millis)

    If millis > 1000 * 5 Then '5초가 지나면
        Exit While
    End If
    Thread.Sleep(TimeSpan.FromMilliseconds(100))
End While
TextBox1.Text = "end."

VB.NET Process 사용예제 ( PDF 열기 )

Dim process As New Process
Dim startInfo As New ProcessStartInfo

startInfo.RedirectStandardOutput = False
startInfo.FileName = "C:\sample.pdf"
startInfo.UseShellExecute = True

process.StartInfo = startInfo
process.Start() ' 여기서 프로그램이 실행됩니다.

' 실행된 서브프로세스가 종료되어야 메인프로그램을 쓰게 하고 싶다면 아래 내용을 진행합니다.

process.WaitForExit() ' 프로세스가 종료될때까지 기다립니다.
process.Close()