이 튜토리얼에서는 migration 을 사용하지 않고, Model 에서 직접 스키마를 작성하고 Table 을 생성하도록 하였다. 그리고, Ramaze (2012.12.08) 에서 테스트를 진행하였다. 


 관련 모듈 설치
$ apt-get install libsqlite3-dev sqlite3
$ gem install ramaze sequel thin sqlite3

프로젝트 생성
$ mkdir -p /opt/project/ramaze
$ cd /opt/project/ramaze
$ ramaze create web

기본 웹서버 변경 -> task/ramaze.rake 에서 :webrick:thin 으로 수정 웹서버 시작 테스트
$ cd /opt/project/ramaze/web
$ thin start


db/model 폴더 생성

$ cd /opt/project/ramaze/web
$ mkdir -p db
$ mkdir -p model

app.rb
에 다음 추가
require 'sequel'

# Open the accounts database
DB = Sequel.connect('sqlite://db/web.db')

# Initialize controllers and models
require __DIR__('model/init')
require __DIR__('controller/init')

model/init.rb
에 다음 추가
require __DIR__('admin')

model/admin.rb
생성
# coding : utf-8
require 'sequel'

class Admin < Sequel::Model(:admins)
  plugin :schema

  set_schema do
    primary_key :id

    String :login, :unique => true, :empty => false
    String :password, :empty => false
    String :name
    String :email
    String :mobile_phone
    String :level, :default => '00'
  end

  # Create the database table if it doesn't exists
  # Also add a admin
  if ! table_exists?
    create_table
    create :login => 'hong', :password => 'hong1234', :name => '홍길동', :email => 'hong@test.com', :mobile_phone => '010-5555-5555', :level => '00'
    create :login => 'jang', :password => 'jang1234', :name => '장영실', :email => 'jang@test.com', :mobile_phone => '010-6666-6666', :level => '01'
  end
end

controller/init.rb
에 다음을 추가
require __DIR__('admin')

controller/admin.rb
생성
class AdminController < Controller
  map '/admin'
  def index
    'Admin Test'
  end
end

프로젝트를 실행하고 브라우저에서 http://localhost:3000/admin 을 접근해본다. 이제, controller/admin.rb 의 index 를 다음과 같이 변경한다.
  def index
    @admins = Admin.all
  end

view
디렉토리 생성
$ cd /opt/project/itsm_ramaze/web/view
$ mkdir admin

view/admin/index.xhtml
생성
<h1> Admin Test Page </h1>
<?r @admins.each do |admin| ?>
  #{admin.login}
  #{admin.name}
  #{admin.email}
  #{admin.mobile_phone}
  #{admin.level}
  <br/>
<?r end ?>

프로젝트를 실행하고 브라우저에서 http://localhost:3000/admin 을 접근해서 데이터 목록이 뜨면 정상이다.


Ruby 에서 여러 디렉토리의 사이즈를 구하고 크기 순으로 정렬하는 방법을 구현해보았다. 여러 팀에서 공유하는 파일의 서버의 경우, 각 디렉토리별(팀)로 어느 정도 사용하는 지를 알아보고 싶을 때 이용하면 좋을 것이다.

require 'find'


$FOLDER_LIST = [
                'C:\\path\\to1',
                'C:\\path\\to2',
                'C:\\path\\to3',
                'C:\\path\\to4',
                'C:\\path\\to5',
               ]

start_time = Time.now


size_folder_list = Array.new
$FOLDER_LIST.each() do | folder_name |
  folder_size = 0
  Find.find(folder_name) do | path |
    if(File.exist?(path))
      folder_size += File.size(path)
    end
  end
  size_folder_list << "#{folder_size}|#{folder_name}"
end

size_folder_list = size_folder_list.sort do |a, b| 
  (a_size, a_file) = a.split(/\|/)
  (b_size, b_file) = b.split(/\|/)
  b_size.to_i <=> a_size.to_i
end

size_folder_list.each do | folder |
  (f_size, f_path) = folder.split(/\|/)
  print f_size + "," + f_path + "\n"
end


end_time = Time.now
puts "\n\n========================================================================="
puts "Start Time : #{start_time}"
puts "End Time   : #{end_time}"

다음은 특정 디렉토리 아래에 있는 파일 중에서 200MB 넘는 파일을 찾아서, 크기로 정렬하여 출력하는 프로그램이다. 어려운 것은 아니지만, 필요할 때 찾아보면 좋을 듯 하여~ ^^

# -*- coding: cp949 -*-
require 'find'

$TARGET     = "C:\\"
$SIZE_LIMIT = 200_000_000

start_time = Time.now

puts "Script Start..."
puts "=========================================================================\n\n"

file_list = Array.new
Find.find($TARGET) do |path|
  if File.file?(path) and File.size(path) > $SIZE_LIMIT
    file_size = File.size(path)
    file_list << file_size.to_s + "|" + path
  end
end


file_list = file_list.sort do |a, b| 
  (a_size, a_file) = a.split(/\|/)
  (b_size, b_file) = b.split(/\|/)
  b_size.to_i <=> a_size.to_i
end


file_list.each do |file|
  (f_size, f_path) = file.split(/\|/)
  print f_size + " -> " + f_path + "\n"
end


end_time = Time.now


puts "\n\n========================================================================="
puts "Start Time : #{start_time}"
puts "End Time   : #{end_time}"

puts "Script End..."

Ruby에서 파일(디렉토리)이름에 특정 문자열이 포함된 목록 출력하기위해서 아래와 같이 하면 된다. Unix(Linux)/Cygwin 에서는 기본적인 도구만으로도 쉽게 할 수 있지만, 그런 환경에 안되는 곳에서는 유용하다. 아주 사소한 팁이지만, 이런 것이 여러가지가 모이면, 나중에 큰 도움이 될 것이다. ^^

# -*- coding: cp949 -*-
require 'find'
 
$dirlist    = ["C:\\"]
$sub_string = "애니메이션"
 
$dirlist.each() do |dirname|
  puts dirname if dirname.include?($sub_string)
 
  Find.find(dirname) do |file|
    next if file == nil
    next if not File.file?(file)
    next if not file.include?($sub_string)
 
    puts file
  end
end


+ Recent posts