일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- RoR
- mysql
- 점심영어스터디
- uploader
- fixture
- Hadoop
- Ruby on Rails
- Shell
- 삽질기
- test
- form
- TIP
- Linux
- transaction
- Rails
- fileUploader
- minitest
- programmingTip
- share
- programming
- carrierwave
- activerecord
- Migration
- Ruby
- Scala
- java
- rubyonrails
- max중첩
- apache spark
- 전화영어
- Today
- Total
목록내 이야기 (37)
아침바라기의 이야기
근자에 겪었던 삽질 내용 공유다. 라이브러리의 현재 설치한 JVM 버전을 지원하는지 확인해보자. 지원이 안된다면? 상황에 맞게 적절히 JVM버전을 업그레이드하거나 하자. 근데 이상이 없다고? 그럼 JDK를 몇 개나 설치했는지 확인해보자.그리고 Path의 java와 JAVA_HOME의 java 버전이 동일한지 확인해보자.이 두개의 버전이 다르다면 Unsupported major.minor version 오류가 발생할 수 있다. 실행하는 JRE(Path에 설정)와 JAVA_HOME이 달라, 스칼라의 Config 라이브러리가 오류를 뱉어내는 것이다. 오류 메시지가 딱히 친절하진 않다. 헌데 그냥 혼자 뻗어버리는거 보다는 뭐라뭐라 잔소리하는게 백번 낫긴하다.--;
모델에 관계 설정은 없고, id 값을 가져다 써야할 땐 어떻게 할까? 이럴땐 ActiveRecord::FixtureSet.identify() 를 사용할 수 있다. Fixture의 label로 레일즈가 어떤 id를 넣었는지 알수 있다. 아래 처럼 사용하면 된다. # users.yml daniel: name: Daniel job_id:
요즈음에는 개인이나 회사나 서버를 이용할때 IDC에 직접 넣기 보단 클라우드 서비스를 주로 이용한다 그런데, AWS나 해외 클라우드 시스템을 사용하면, 시스템 로컬 시간이 그 지역 서버시간에 맞춰져 있다. (AWS로 서버를 발급받으면 PST(미국 태평양 시간)인 경우가 많다. 아마도 미국쪽 서버를 받아서 그렇겠지-_-;)프로그램에서 시스템 시간을 사용하는 경우 서비스 운영시간의 차이가 있으면 당연히 문제가 발생한다.그래서 프로그램에서 주로 사용하는 시간대로 맞춰 주는 것이 여러모로 용이하다.운영팀과의 커뮤니케이션과 개발 모니터링을 위해서도 그게 훨 유용하다.한 서버에 여러시간대 서비스를 만들지 않는 한은 말이다.그래서, 현재 사용하고 있는 localtime 을 구하려면 * date 를 사용한다. 맨 뒤에..
예전에 삽질했던 케이스를 공유해본다. 아래와 같이 company_photo 라는 테이블이 있다 치자. company_photo id | is_represent |company_name| register_date| ---------------------------------------------------- 1 | Y |Vista Corp| 2015-10-23 | 2 | N |Vista Corp| 2015-10-22 | 3 | N |Data Corp | 2015-10-11 | 4 | N |Data Corp | 2015-10-12 | 5 | Y |Test Corp | 2015-10-23 | 자아 여기서 회사의 대표 이미지(is_represent 가 'Y'인 값)가 아니면,최근에 등록한 company_phot..
비슷한 주제인 Mini test를 이용한 모델 테스트 팁은 이전에 한번 다뤘다. 주의점이 한가지 있다. Fixture는 개수가 많아지면 속도가 느려진다. 현재 DB의 데이터를 모두 지웠다가 Fixture 데이터를 넣고 테스트가 완료 되면 롤백한다. 이 과정을 진행하다보니 기존에 데이터가 많거나 Fixture 수가 늘어나면 늘어날수록 느려진다. 이걸 해결하려면 test_helper.rb에서 class ActiveSupport::TestCase fixtures :all 이 부분을 수정하는 것이 좋다. 각 테스트 케이스 setup 에서 fixture를 로딩하도록 만들거나 헬퍼를 통해서 필요한 것만 로딩하는 걸 만들어주도록 한다. Fixture는 YML 형태로 보통 사용한다아래는 예제다. # users.yml ..
블록은 일종의 클로저라고 할 수 있다. 실행할 내용을 하나의 함수로 묶고, 이를 객체로 만들어 원하는 시점에 호출할 수 있다. 이것이 바로 블록이다. 레고 장난감 블럭처럼 여기저기 쉽게 가져다 낌을 수 있게 만들고자 블럭이 아닐까 싶다. 블럭을 호출할땐 여러 방법이 있다. 루비에서의 블록은 1줄 식으로 표현할때 {} 을 사용하고, 두줄 이상일때는 do end를 사용한다. 예를 들자면 다음과 같다. # 1줄 짜리 {} counter = 0 4.times { counter += 1 } # 1줄 이상 do-end Application::Base.transaction do # do transaction end 그럼 이제 블록의 정의는 어떻게 해야하는걸까? 크게 두가지 형태가 있다. 1줄짜리 블록 형태로 정의 하..
주의) Active Record scope vs class method 원문 글과 거의 비슷합니다. 제가 이해 해보려고 요약해보는 내용입니다.-.-;; Active record에는 scope라는 개념이 있다. Active record로 DB에서 데이터를 조회할 때 조회 범위를 줄여준다거나 필터링 할때 주로 사용한다. 예를 들면, 블로그에서 발행된 포스트만 조회한다는 의미를 담고 있을때, Post.published 위와 같이 조회하도록 한다. 자 여기서 분명한 특징을 생각해보자. 조회 한걸 봤을때 클래스 메소드가 아닐까? 일종의 클래스 메소드가 맞다. 다만 클래스 메소드처럼 클래스가 로드 되는 시점에 블록을 평가하는 형태가 하나, 호출되는 시점에 블록을 평가하는 형태 두가지가 있다.
mini 테스트는 Fixture를 사용한다. 즉 DB를 이용해서 테스트를 하는데 test case마다 한번 전체 테이블의 데이터를 지우고 Fixture를 한번 로딩하는 반복을 이용한다. mini test에서는 test case 마다 transaction의 begin, rollback 을 사용한다. 대부분 DB(MS SQL 빼고)에서 중첩 transaction을 지원하지 않으므로 테스트 케이스 테스트 중에 오류가 발생할 수 있다. 트랜잭션이 걸려 있는 경우, 1. transaction을 스킵하는 기능을 만듬2. AOP를 적용 3. transaction을 사용하지 않는다.4. helper class를 통해서 테스트 범위 밖으로 밀어버린다. 위의 4가지 방법을 이용해서 트랜잭션 중첩을 회피 해야한다. fixt..
Rails 트랜잭션 오늘은 Rails에서 트랜잭션을 사용하는 방법을 다뤄본다.테스트는 레일즈 4.1.2 버전에서 진행했다. 기본적인 사용벙법 모델에 transaction method(ActiveRecord::ConnectionAdapters::DatabaseStatements 에 있다)를 호출하면 된다.파라미터로 블록 안에 한번에 transaction 으로 처리해야 할 내용을 추가한다.(참 쉽죠?)이제 예제를 보자.Article.transaction do @article.title = 'change.' @article.save end 임의로 롤백을 하려면? 간단히 ActiveRecord::Rollback.new 를 raise하면 된다. Article.transaction do @article.title ..
느리지만 매우 안정적인 Hive의 대안으로 Presto를 사용 중이다. 통계용 데이터를 쿼리로 만들던 중에 팁 몇가지 정리해본다. (Presto + Hive + Hadoop 2.0 + MySQL 연동) 1. 하이브로의 INSERT는 불가능하다 * 아직 지원하지 않는다. (UPDATE는 아예 메뉴얼에도 없다!) * 결과를 저장하려면 CREATE AS 문을 사용하면 테이블로 저장할 수 있다. * 아래처럼... CREATE TABLE visit_log AS SELECT log_date, detail FROM raw_log 2. 서브쿼리를 사용할 수 없다 * 역시 아직 지원하지 않는다. * 대안으로 join과 inner view를 사용할 수 있다. SELECT t.id, c.val AS code FROM tab..