geminabox 설치/실행

Ruby 2017. 10. 24. 09:56



https://github.com/geminabox/geminabox






geminabox는 사내(inhouse)에서 custom plugin을 설치하는데 도움을 준다.


설치(최신 geminabox는 루비 2.2.2가 필요하다)


$ sudo gem install geminabox




config.ru 파일을 생성한다. 데이터 저장위치도 잘 선택한다.


require "rubygems"

require "geminabox"

Geminabox.data = "/home/www/geminabox/gems"

run Geminabox::Server




geminabox 데몬을 시작하는 스크립트이다. rackup을 사용한다. -p는 포트이고, -E는 개발환경을 의미한다. -E production을 주지 않으면 로컬에서만 확인할 수 있다. -D는 데몬으로 동작하도록 알린다.


rackup -p 3000 -E production -D



데몬을 중지하려면 다음을 실행한다.



PID=`ps -ef | grep 'rackup' | grep -v grep | awk '{print $2}'`

if [ -z $PID ]; then

  echo "no process"

else 

  kill -9 $PID

  echo "killed .. done"

fi



'Ruby' 카테고리의 다른 글

geminabox 설치/실행  (0) 2017.10.24
gem 설치 디버깅하기  (0) 2017.10.20
ruby zookeeper  (0) 2017.02.07
[ruby] http call 예시  (0) 2017.01.06
[capistrano] 다른 task 호출하기  (0) 2016.12.07
ruby on rails 애플리케이션 실행하기  (0) 2016.10.12
Posted by '김용환'

댓글을 달아 주세요

gem 설치 디버깅하기

Ruby 2017. 10. 20. 18:45



--debug --backtrace --verbose 옵션를 추가한다.



예)


gem install --debug --backtrace --verbose  fluent-plugin-force-encoding  -v 0.0.5

'Ruby' 카테고리의 다른 글

geminabox 설치/실행  (0) 2017.10.24
gem 설치 디버깅하기  (0) 2017.10.20
ruby zookeeper  (0) 2017.02.07
[ruby] http call 예시  (0) 2017.01.06
[capistrano] 다른 task 호출하기  (0) 2016.12.07
ruby on rails 애플리케이션 실행하기  (0) 2016.10.12
Posted by '김용환'

댓글을 달아 주세요

ruby zookeeper

Ruby 2017. 2. 7. 10:58



ruby 공부차, ruby에서 zookeeper 클라이언트(https://github.com/zk-ruby/zookeeper)를 사용한 예시이다. 



require 'json'

require 'zookeeper'


@zookeeper = Zookeeper.new("zk1.plus.google.com:2181")

@root_key = "redis"


@zookeeper.get_children(:path => @root_key).tap do |node|

  queue = node[:children]

  while ! queue.empty? do

    children_path = queue.shift

    child_node = @zookeeper.get_children(:path => @root_key + "/" + children_path)

    children_queue = child_node[:children]

    ........

    

  end

end



'Ruby' 카테고리의 다른 글

geminabox 설치/실행  (0) 2017.10.24
gem 설치 디버깅하기  (0) 2017.10.20
ruby zookeeper  (0) 2017.02.07
[ruby] http call 예시  (0) 2017.01.06
[capistrano] 다른 task 호출하기  (0) 2016.12.07
ruby on rails 애플리케이션 실행하기  (0) 2016.10.12
Posted by '김용환'

댓글을 달아 주세요

[ruby] http call 예시

Ruby 2017. 1. 6. 16:16




Ruby로 작성한 아주 간단한 Http 호출 예시 코드이다. 


require 'net/http'

require 'uri'

require 'json'


class Host

   def initialize(ip)

      @ip = ip

   end


   def http_req

      uri = URI('http://host.google.io/views?ip=' + @ip)

      http = Net::HTTP.new('host.google.io', 80)

      req = Net::HTTP::Get.new(uri.request_uri)

      http.open_timeout = 5

      http.read_timeout = 20

      response = http.request(req)

      if response.code.to_i == 200

        return response.body

      else

        raise Exception.new("#{response.code} to #{uri}\n#{response.body}")

      end

   end


   def get_host

     json = JSON.parse(http_req)

     json["hostname"]+ ", " + json["name"]

   end

end






'Ruby' 카테고리의 다른 글

gem 설치 디버깅하기  (0) 2017.10.20
ruby zookeeper  (0) 2017.02.07
[ruby] http call 예시  (0) 2017.01.06
[capistrano] 다른 task 호출하기  (0) 2016.12.07
ruby on rails 애플리케이션 실행하기  (0) 2016.10.12
[ruby] File 존재 여부 확인할 때 홈 디렉토리 주의  (0) 2016.08.18
Posted by '김용환'

댓글을 달아 주세요


capistrano에서 다른 task를 호출하는 방법과 예시이다. 

1. invoke 실행하기 

2. Rake:Task 실행하기

Rake::Task["namespace:task"].invoke




1. invoke 실행하기


  task :status do

    invoke 'deploy:status'

  end


  task :ping do

    invoke 'deploy:ping'

  end



2. Rake::Task 실행하기


  task :change do

    Rake::Task["deploy:change_port"].invoke

  end


  task :change_port do

..

  end



'Ruby' 카테고리의 다른 글

ruby zookeeper  (0) 2017.02.07
[ruby] http call 예시  (0) 2017.01.06
[capistrano] 다른 task 호출하기  (0) 2016.12.07
ruby on rails 애플리케이션 실행하기  (0) 2016.10.12
[ruby] File 존재 여부 확인할 때 홈 디렉토리 주의  (0) 2016.08.18
[ruby] or equals 기능 - ||=  (0) 2016.08.17
Posted by '김용환'

댓글을 달아 주세요


참조

http://rubykr.github.io/rails_guides/getting_started.html




ruby on rails 애플리케이션을 실행하려면 다음 절차를 가진다.


1. 외부 라이브러러를 다운받는다.


$ bundle install 



2. 기타 유틸리를 확인해서 설치한다. 

yum 또는 brew를 사용한다.


$ brew install cronolog

(실행 중에 3단계에서 http 요청을 제대로 못할 경우..)



3. rails server



4. 브라우져 실행


 http://localhost:3000/

 http://localhost:3000/uri

Posted by '김용환'

댓글을 달아 주세요



Ruby에서  ~를 사용하여 File의 존재 여부를 확인하고 싶을 때가 있다.


아래와 같이 File.file api를 사용해 파일 존재 여부를 확인하는 코드를 짰지만, 동작되지 않았다.


if
File.file?('~/job_name')
phase = `cat ~/job_name`.strip
else
phase = "develop"
end



아래와 같은 코드는 동작된다. 하지만,  절대 path와 상대 path 둘 다 사용하는 형태라서 어색하다.


if
File.file?('/Users/samuel.kim/job_name')
phase = `cat ~/job_name`.strip
else
phase = "develop"
end




home 디렉토리를 의미하는 ~와 함께 사용할 떄는 File.expand_path를 써야 의도된 대로 동작한다. 


if (File.exist? File.expand_path "~/job_name")
phase = `cat ~/job_name`.strip
else
phase = "develop"
end




Posted by '김용환'

댓글을 달아 주세요

[ruby] or equals 기능 - ||=

Ruby 2016. 8. 17. 21:03



특정 변수가 정의되지 않았다면, 값을 저장하는 코드가 있다고 가정한다.

아마도 c/c++/java에 익숙한 개발자라면, 다음과 같이 코드를 짤 수 있다. 


xx = 3
unless defined? xx
xx = [1,2,3].inject(0) { |sum, t| sum + t }
end
puts xx


ruby에서는 or equals 라는 ||=를 사용하면, if 또는 unless 문 없이 쉽게 한 줄로 구현할 수 있다. 


xx = 3
xx ||= [1,2,3].inject(0) { |sum, t| sum + t }
puts xx


Posted by '김용환'

댓글을 달아 주세요



숫자, 문자에 대해서 교집합, 합집합, -집합(supplement) 기능을 사용할 수 있다.



a = [1, 2, 3, 4, 5]

b = [4, 5, 6, 7, 8]

puts "a-b (int) : " + (a - b).map { |s| "#{s}" }.join(' ')



a = ["1", "2", "3", "4", "5"]

b = ["4", "5", "6", "7", "8"]

puts "a-b : " + (a - b).map { |s| "#{s}" }.join(' ')

puts "b-a : " + (b - a).map { |s| "#{s}" }.join(' ')

puts "(a-b) || (b-a) : " + (a- b | b - a).map { |s| "#{s}" }.join(' ')





<결과>

a - b (int) : 1 2 3

a-b : 1 2 3

b-a : 6 7 8

(a-b) || (b-a) : 1 2 3 6 7 8




Posted by '김용환'

댓글을 달아 주세요

[ruby] 타입(type) 알기

Ruby 2016. 8. 17. 14:18



ruby에서 타입을 확인하고 싶다면, .class를 호출한다.


require 'redis'


...

redis = Redis.new(TEST_REDIS)
result = redis.hgetall("test")
if (result.nil?)
return nil
end

puts result.class

ruby hash를 리턴한다.


<결과>

Hash








Posted by '김용환'

댓글을 달아 주세요