본문 바로가기

Ruby

[aws] The request signature we calculated does not match the signature you provided. /Library/Ruby/Gems/2.0.0/gems/aws-sdk-core-2.2.11/lib/seahorse/client/plugins/raise_response_errors.rb:15:in `call': The request signature we calculated does not match the signature you provided. Check your key and signing method. (Aws::S3::Errors::SignatureDoesNotMatch) from /Library/Ruby/Gems/2.0.0/gems/aws-sdk-core-2.2.11/lib/aws-sdk-core/plugins/s3_sse_cpk.rb:18:in `call' from /Library/Ruby/.. 더보기
[Sinatra] 소스가 변경되면 자동으로 반영되도록 하기 기본적으로 템플릿 파일들은 변경하여도 서버 재시작 없이 적용이 되지만, rb 파일을 변경하였을 경우에는 서버 재시작을 해야 반영이 된다.Sinatra에서 제공하는 해결책은 rerun gem을 이용하는것인데 (http://www.sinatrarb.com/faq.html) (https://github.com/alexch/rerun)이는 윈도우 환경에서 정상적으로 동작하지 않는다.C:/Ruby22/lib/ruby/gems/2.2.0/gems/rerun-0.11.0/lib/rerun/runner.rb:152:in `fork': fork() function is unimplemented on this machine (NotImplementedError) from C:/Ruby22/lib/ruby/gems/2.2... 더보기
[Sinatra] yield 를 이용해 중첩된 템플릿 사용하기 루비의 yield 문을 이용하여 템플릿 안에 템플릿을 렌더링하는것을 만들어볼 수 있습니다. 이러한 방법은 전체 레이아웃과, 각각의 콘텐츠의 레이아웃을 분리시킬 때 유용합니다. 한개의 중첩 안에 여러개의 템플릿을 사용할 때는 아래와 같이 이용합니다. yield에 렌더링해야 하는 템플릿의 타입을 지정합니다. 더보기
[Ruby] autoload http://ruby-doc.org/core-2.1.0/Module.html#method-i-autoload autoload는 클래스가 사용되는 시점에 해당 클래스가 포함된 rb 파일을 lazy 하게 로드할 수 있도록 하는 기능을 제공합니다. autoload? 메소드를 사용하면, 특정 클래스에 대해 autoload 가 지정된 파일 경로를 가져올 수도 있습니다. 더보기
[Ruby] at_exit 루비 Sinatra 의 간단한 예제 코드는 아래와 같습니다. require 'sinatra' get '/' do "Hello" end 위의 코드를 실행하면 바로 웹 서버가 실행되는데, 이 동작은 약간 이상합니다. 분명히 라우팅만 지정했을 뿐이고, 서버를 실행하는 코드는 아무데도 없습니다. 파일의 끝이 나와서 프로그램이 꺼져야 하는데, 꺼지지 않고 계속 서버가 실행됩니다. 이는 at_exit를 이용한 트릭이며, 사용자가 직접 서버를 켜는 코드를 작성하지 않아도 되도록 도와줍니다. at_exit는 앱이 종료될 때 실행되는 콜백을 지정하는 함수입니다. 단순히 블록 하나만 넘겨주면 되며, 사용법은 아래와 같습니다. at_exit do puts "Run Server" end at_exit를 여러번 실행하면, 콜백.. 더보기
[Ruby] SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError) Ruby HTTPS 연결에서의 아래와 같은 에러가 발생할 때C:/Ruby22/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError) 위 파일을 rb 파일이 위치한 폴더에 다운받습니다. 방법 1. SSL_CERT_FILE 환경 변수 설정하기 ENV['SSL_CERT_FILE'] = (__dir__ + '/cacert.pem') 또는 방법2. 수동으로 인증서 지정하기 uri = URI("https://api.github.com/some_api_path") req = Ne.. 더보기
[Ruby] 로 jenkins & LINE 원격 환경 구성하기 jenkins & LINE 원격 환경을 구성하는 방법을 소개하는 글은 아닙니다. 얼마 전부터 '다른' 방법으로 jenkins를 다루는법을 생각하다가 결국 LINE 메신져를 이용해서 관리하기로 정했다. 이 방법의 제일 좋은점은 빌드가 끝나면 '라인 메신저'로 완료를 알려준다. (라인 앱에서 푸시도옴) 기본적으로 원격으로 빌드할 수 있고 (당연히), 서버의 item들의 리스트를 모두 가져오는 기능도 나중에 추가하였다. 이 이상의 기능은 더 만들라면 만들수 있겠지만, 별로 필요가 없어서 안만듬. (이거보다 더 상세히 컨트롤하고싶으면 젠킨스 페이지를 들어가는게 더 편할텐데 라는 생각이다,) 라인 메신져로 빌드를 명령한 화면. 빌드 파라미터중에 Version이 있는데, 이건 수동으로 지정해서 빌드해야 한다. 나머.. 더보기
[Ruby] binding_of_caller binding_of_caller gem을 사용하면 자신의 호출자의 binding을 가져올 수 있다. 원래대로라면 foo 함수에서 bar의 로컬에 접근하는것은 불가능하다. binding_of_caller gem을 사용하면 콜스택을 거슬러 올라간 binding을 가져와 로컬 값을 설정하거나, 가져오는것이 가능하다. https://github.com/banister/binding_of_caller 더보기
[Ruby] 루비의 깔끔한 문법 1. @를 이용한 로컬 변수와, 인스턴스 변수의 구분 def foo @var1 = 1234 # 인스턴스 변수 var2 = 1234 # 지역 변수 end 루비는 변수 이름에 @를 붙이면 인스턴스 변수로 동작한다.이러한 강제적인 컨벤션은 완벽한 인텔리센스가 제공되지 못하는 루비 특성 상 굉장히 유용하며, 코드를 보았을 때 어떠한 변수가 인스턴스인지, 로컬인지를 한눈에 파악할 수 있도록 해준다.C++등에서 쓰이는 이름 앞에 m_를 붙이는 컨벤션보다 깔끔하다는것은 말할 것도 없다. 2. !, ? 를 접미사로 가지는 네이밍 규칙 queue.empty? # isEmpty buffer.reverse! # reverse한 결과를 복사-리턴하지 않고 자기 자신을 바꾸는것을 의미 메소드 뒤의 ? 는 이 메소드가 bool .. 더보기
[Ruby] select, map, collect select콜렉션에서 주어진 조건과 일치하는 모든 항목의 콜렉션을 반환한다. puts [1,2,3,4,5,6].select {|x| x >= 3 } # 3 4 5 6 collect콜렉션의 모든 원소들을 가공해서 새로운 콜렉션을 반환한다. puts [1,2,3].map {|x| x * x } # 1 4 9 mapmap은 collect의 alias이며, 다른 언어에서 사용하는 메소드와 네이밍을 맞춰서 편리성을 제공하기 위해 만들어진 메소드이다. 더보기