작성자: sio4 (최종수정: 23 Aug 2009 18:35)
Redmine의 최신 기능을 사용하고픈 생각과, 작게라도 Redmine의 개발에 참여해보려는 욕심에 최신 개발 버전을 사용해보기로 했다.
먼저 subversion을 설치한다. 물론, 앞으로 개발하게 될 뭔가를 위한 것이기도 하지만, 그에 앞서 redmine의 최신 버전을 가져올 방법이 subversion checkout이기 때문이다. (redmine은 subversion으로 관리되고 있고 또한 동시에 github에 미러되고 있다.)
$ sudo apt-get install subversion
sio4@ubuntu:/opt$ sudo apt-get install subversion
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 패키지를 더 설치할 것입니다:
libapr1 libaprutil1 libmysqlclient15off libneon27-gnutls libpq5 libsvn1
mysql-common
제안하는 패키지:
subversion-tools db4.6-util
다음 새 패키지를 설치할 것입니다:
libapr1 libaprutil1 libmysqlclient15off libneon27-gnutls libpq5 libsvn1
mysql-common subversion
0개 업그레이드, 8개 새로 설치, 0개 지우기 및 13개 업그레이드 안 함.
3701k바이트 아카이브를 받아야 합니다.
이 작업 후 12.4M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까 [Y/n]?
<...>
sio4@ubuntu:/opt$
다음은 프로젝트를 위한 저장소 환경을 만들어줄 차례.(redmine 설치의 일부라고 볼 수는 없지만…) 이번 설치는 전용의 가상머신 위에서 이루어지고 있어서 가상머신 정책에 의하여 응용/데이터를 /opt 아래에 두기로 한다. (FHS 측면에서 애매한 부분은 있지만 완전히 어긋난다고 볼 수도 없다. 가장 중요한 것은, 이렇게 하는 것이 가상머신 관리에 편리해서…)
sio4@ubuntu:/opt$ sudo chown sio4 .
sio4@ubuntu:/opt$ mkdir repository
sio4@ubuntu:/opt$ svnadmin create repository/vios
sio4@ubuntu:/opt$ ls repository/vios/
README.txt conf db format hooks locks
sio4@ubuntu:/opt$
그리고, 그 옆에서 아래와 같이 최신버전의 redmine을 가져온다.
$ svn co http://redmine.rubyforge.org/svn/trunk redmine
sio4@ubuntu:/opt$ svn co http://redmine.rubyforge.org/svn/trunk redmine
A redmine/test
A redmine/test/unit
A redmine/test/unit/document_test.rb
A redmine/test/unit/token_test.rb
<...>
A redmine/public/stylesheets/scm.css
A redmine/public/stylesheets/application.css
A redmine/public/favicon.ico
U redmine
체크아웃된 리비전 2785.
sio4@ubuntu:/opt$ ls
lost+found redmine repository
sio4@ubuntu:/opt$
redmine은 ruby on rails 응용프로그램이므로 구동을 위해 ruby platform을 마련해야 한다. 다음의 명령을 이용하여 일단 ubuntu 8.10에 포함되어있는 ruby와 일부 관련 패키지를 설치한다. 주의할 점은, 이 단계에서 rails, rake 등이 빠져있다는 점인데, redmine과의 버전 호환성 때문에 다음 단계에서 gem 명령을 이용하여 별도로 설치할 것이다.
$ sudo apt-get install ruby rubygems sqlite3 libsqlite3-ruby libopenssl-ruby
sio4@ubuntu:/opt$ sudo apt-get install ruby rubygems sqlite3 libsqlite3-ruby libopenssl-ruby
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 패키지를 더 설치할 것입니다:
irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 libsqlite3-ruby1.8
rdoc1.8 ruby1.8 rubygems1.8
제안하는 패키지:
graphviz ruby1.8-examples ri1.8 ruby1.8-dev build-essential rubygems-doc
sqlite3-doc
다음 새 패키지를 설치할 것입니다:
irb1.8 libopenssl-ruby libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8
libsqlite3-ruby libsqlite3-ruby1.8 rdoc1.8 ruby ruby1.8 rubygems rubygems1.8
sqlite3
0개 업그레이드, 13개 새로 설치, 0개 지우기 및 13개 업그레이드 안 함.
2169k바이트 아카이브를 받아야 합니다.
이 작업 후 9630k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까 [Y/n]?
<...>
sio4@ubuntu:/opt$
이제 rails 차례. 다음과 같이 gem 명령을 이용하여 rails를 설치해준다. 이 과정에서 호환되는 버전의 rake가 함께 설치된다. 이렇게 gem 명령을 일반 사용자 계정으로 실행하게 되면 해당 gem이 사용자 경로에 설치되게 된다. 이렇게 설치된 rails를 freeze 명령으로 redmine의 vendor 아래에 설치하도록 한다. (필수적인 것은 아니지만 독립성 확보를 위하여)
$ gem install rails -v=2.2.2 --no-rdoc --no-ri
$ export PATH=$PATH:~/.gem/ruby/1.8/bin
$ rake rails:freeze:gems
sio4@ubuntu:/opt$ gem install rails -v=2.2.2 --no-rdoc --no-ri
WARNING: Installing to ~/.gem since /var/lib/gems/1.8 and
/var/lib/gems/1.8/bin aren't both writable.
WARNING: You don't have /home/sio4/.gem/ruby/1.8/bin in your PATH,
gem executables will not run.
Successfully installed rake-0.8.7
Successfully installed activesupport-2.2.2
Successfully installed activerecord-2.2.2
Successfully installed actionpack-2.2.2
Successfully installed actionmailer-2.2.2
Successfully installed activeresource-2.2.2
Successfully installed rails-2.2.2
7 gems installed
sio4@ubuntu:/opt$ cd redmine/
sio4@ubuntu:/opt/redmine$ export PATH=$PATH:/home/sio4/.gem/ruby/1.8/bin
sio4@ubuntu:/opt/redmine$ rake rails:freeze:gems
(in /opt/redmine)
Freezing to the gems for Rails 2.2.2
rm -rf vendor/rails
mkdir -p vendor/rails
cd vendor/rails
WARNING: Installing to ~/.gem since /var/lib/gems/1.8 and
/var/lib/gems/1.8/bin aren't both writable.
Unpacked gem: '/opt/redmine/vendor/rails/activesupport-2.2.2'
mv activesupport-2.2.2 activesupport
Unpacked gem: '/opt/redmine/vendor/rails/activerecord-2.2.2'
mv activerecord-2.2.2 activerecord
Unpacked gem: '/opt/redmine/vendor/rails/actionpack-2.2.2'
mv actionpack-2.2.2 actionpack
Unpacked gem: '/opt/redmine/vendor/rails/actionmailer-2.2.2'
mv actionmailer-2.2.2 actionmailer
Unpacked gem: '/opt/redmine/vendor/rails/activeresource-2.2.2'
mv activeresource-2.2.2 activeresource
Unpacked gem: '/opt/redmine/vendor/rails/rails-2.2.2'
cd -
sio4@ubuntu:/opt/redmine$ ls vendor/rails/
actionmailer actionpack activerecord activeresource activesupport railties
sio4@ubuntu:/opt/redmine$
다음은 기본 설정. 데이터베이스와 메일시스템을 설정해준다. (역시 간단한 sqlite3가 좋다.)
sio4@ubuntu:/opt/redmine$ cp config/database.yml.example config/database.yml
sio4@ubuntu:/opt/redmine$ cp config/email.yml.example config/email.yml
sio4@ubuntu:/opt/redmine$ vi config/database.yml config/email.yml
2 파일을 고치기
sio4@ubuntu:/opt/redmine$ cat config/database.yml
# MySQL (default setup). Versions 4.1 and 5.0 are recommended.
#
# Get the fast C bindings:
# gem install mysql
# (on OS X: gem install mysql -- --include=/usr/local/lib)
# And be sure to use new-style password hashing:
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
production:
adapter: sqlite3
dbfile: db/production.db
development:
adapter: sqlite3
dbfile: db/development.db
test:
adapter: sqlite3
dbfile: db/test.db
demo:
adapter: sqlite3
dbfile: db/demo.db
sio4@ubuntu:/opt/redmine$ cat config/email.yml
# Outgoing email settings
production:
delivery_method: :smtp
smtp_settings:
address: spmail.skcc.com
port: 25
domain: oss.skcc.com
development:
delivery_method: :smtp
smtp_settings:
address: 127.0.0.1
port: 25
domain: example.net
authentication: :login
user_name: "redmine@example.net"
password: "redmine"
sio4@ubuntu:/opt/redmine$
거의 끝나간다. 다음은 데이터베이스를 초기화할 시간. 아래와 같이 데이터베이스를 구성하고, 함께 배포되는 기본값들을 반영하도록 한다.
$ rake db:migrate RAILS_ENV=production
$ rake redmine:load_default_data RAILS_ENV=production
참고: 현재 설치한 리비전(r2791)에는 초기 데이터 적재 내용 중 일부 내용(문서형식, 이슈우순선위, 작업분류 등의 Enum 값)이 정상적으로 반영되지 않는 문제가 있었다. (patch-default-enums)
sio4@ubuntu:/opt/redmine$ rake db:migrate RAILS_ENV=production
(in /opt/redmine)
== Setup: migrating ==========================================================
-- create_table("attachments", {:force=>true})
-> 0.0055s
-- create_table("auth_sources", {:force=>true})
-> 0.0052s
-- create_table("custom_fields", {:force=>true})
-> 0.0053s
-- create_table("custom_fields_projects", {:force=>true, :id=>false})
-> 0.0051s
-- create_table("custom_fields_trackers", {:force=>true, :id=>false})
-> 0.0043s
-- create_table("custom_values", {:force=>true})
-> 0.0048s
-- create_table("documents", {:force=>true})
-> 0.0051s
-- add_index("documents", ["project_id"], {:name=>"documents_project_id"})
-> 0.0132s
-- create_table("enumerations", {:force=>true})
-> 0.0050s
-- create_table("issue_categories", {:force=>true})
-> 0.0045s
-- add_index("issue_categories", ["project_id"], {:name=>"issue_categories_project_id"})
-> 0.0038s
-- create_table("issue_histories", {:force=>true})
-> 0.0046s
-- add_index("issue_histories", ["issue_id"], {:name=>"issue_histories_issue_id"})
-> 0.0046s
-- create_table("issue_statuses", {:force=>true})
-> 0.0048s
-- create_table("issues", {:force=>true})
-> 0.0062s
-- add_index("issues", ["project_id"], {:name=>"issues_project_id"})
-> 0.0050s
-- create_table("members", {:force=>true})
-> 0.0055s
-- create_table("news", {:force=>true})
-> 0.0055s
-- add_index("news", ["project_id"], {:name=>"news_project_id"})
-> 0.0046s
-- create_table("permissions", {:force=>true})
-> 0.0065s
-- create_table("permissions_roles", {:force=>true, :id=>false})
-> 0.0087s
-- add_index("permissions_roles", ["role_id"], {:name=>"permissions_roles_role_id"})
-> 0.0107s
-- create_table("projects", {:force=>true})
-> 0.0063s
-- create_table("roles", {:force=>true})
-> 0.0050s
-- create_table("tokens", {:force=>true})
-> 0.0051s
-- create_table("trackers", {:force=>true})
-> 0.0052s
-- create_table("users", {:force=>true})
-> 0.0061s
-- create_table("versions", {:force=>true})
-> 0.0062s
-- add_index("versions", ["project_id"], {:name=>"versions_project_id"})
-> 0.0044s
-- create_table("workflows", {:force=>true})
-> 0.0054s
== Setup: migrated (0.4223s) =================================================
== IssueMove: migrating ======================================================
== IssueMove: migrated (0.0143s) =============================================
== IssueAddNote: migrating ===================================================
== IssueAddNote: migrated (0.0088s) ==========================================
== ExportPdf: migrating ======================================================
== ExportPdf: migrated (0.0144s) =============================================
== IssueStartDate: migrating =================================================
-- add_column(:issues, :start_date, :date)
-> 0.0162s
-- add_column(:issues, :done_ratio, :integer, {:null=>false, :default=>0})
-> 0.0152s
== IssueStartDate: migrated (0.0318s) ========================================
== CalendarAndActivity: migrating ============================================
== CalendarAndActivity: migrated (0.0192s) ===================================
== CreateJournals: migrating =================================================
-- create_table(:journals, {:force=>true})
-> 0.0068s
-- create_table(:journal_details, {:force=>true})
-> 0.0074s
-- add_index("journals", ["journalized_id", "journalized_type"], {:name=>"journals_journalized_id"})
-> 0.0047s
-- add_index("journal_details", ["journal_id"], {:name=>"journal_details_journal_id"})
-> 0.0056s
-- drop_table(:issue_histories)
-> 0.0040s
== CreateJournals: migrated (0.0395s) ========================================
== CreateUserPreferences: migrating ==========================================
-- create_table(:user_preferences)
-> 0.0047s
== CreateUserPreferences: migrated (0.0049s) =================================
== AddHideMailPref: migrating ================================================
-- add_column(:user_preferences, :hide_mail, :boolean, {:default=>false})
-> 0.0179s
== AddHideMailPref: migrated (0.0182s) =======================================
== CreateComments: migrating =================================================
-- create_table(:comments)
-> 0.0070s
== CreateComments: migrated (0.0072s) ========================================
== AddNewsCommentsCount: migrating ===========================================
-- add_column(:news, :comments_count, :integer, {:null=>false, :default=>0})
-> 0.0199s
== AddNewsCommentsCount: migrated (0.0202s) ==================================
== AddCommentsPermissions: migrating =========================================
== AddCommentsPermissions: migrated (0.0135s) ================================
== CreateQueries: migrating ==================================================
-- create_table(:queries, {:force=>true})
-> 0.0077s
== CreateQueries: migrated (0.0079s) =========================================
== AddQueriesPermissions: migrating ==========================================
== AddQueriesPermissions: migrated (0.0142s) =================================
== CreateRepositories: migrating =============================================
-- create_table(:repositories, {:force=>true})
-> 0.0072s
== CreateRepositories: migrated (0.0074s) ====================================
== AddRepositoriesPermissions: migrating =====================================
== AddRepositoriesPermissions: migrated (0.0341s) ============================
== CreateSettings: migrating =================================================
-- create_table(:settings, {:force=>true})
-> 0.0065s
== CreateSettings: migrated (0.0068s) ========================================
== SetDocAndFilesNotifications: migrating ====================================
== SetDocAndFilesNotifications: migrated (0.1227s) ===========================
== AddIssueStatusPosition: migrating =========================================
-- add_column(:issue_statuses, :position, :integer, {:default=>1})
-> 0.0225s
== AddIssueStatusPosition: migrated (0.0247s) ================================
== AddRolePosition: migrating ================================================
-- add_column(:roles, :position, :integer, {:default=>1})
-> 0.0174s
== AddRolePosition: migrated (0.0195s) =======================================
== AddTrackerPosition: migrating =============================================
-- add_column(:trackers, :position, :integer, {:default=>1})
-> 0.0200s
== AddTrackerPosition: migrated (0.0219s) ====================================
== SerializePossiblesValues: migrating =======================================
== SerializePossiblesValues: migrated (0.0006s) ==============================
== AddTrackerIsInRoadmap: migrating ==========================================
-- add_column(:trackers, :is_in_roadmap, :boolean, {:null=>false, :default=>true})
-> 0.0197s
== AddTrackerIsInRoadmap: migrated (0.0200s) =================================
== AddRoadmapPermission: migrating ===========================================
== AddRoadmapPermission: migrated (0.0086s) ==================================
== AddSearchPermission: migrating ============================================
== AddSearchPermission: migrated (0.0085s) ===================================
== AddRepositoryLoginAndPassword: migrating ==================================
-- add_column(:repositories, :login, :string, {:limit=>60, :default=>""})
-> 0.0171s
-- add_column(:repositories, :password, :string, {:limit=>60, :default=>""})
-> 0.0179s
== AddRepositoryLoginAndPassword: migrated (0.0353s) =========================
== CreateWikis: migrating ====================================================
-- create_table(:wikis)
-> 0.0055s
-- add_index(:wikis, :project_id, {:name=>:wikis_project_id})
-> 0.0042s
== CreateWikis: migrated (0.0101s) ===========================================
== CreateWikiPages: migrating ================================================
-- create_table(:wiki_pages)
-> 0.0045s
-- add_index(:wiki_pages, [:wiki_id, :title], {:name=>:wiki_pages_wiki_id_title})
-> 0.0041s
== CreateWikiPages: migrated (0.0089s) =======================================
== CreateWikiContents: migrating =============================================
-- create_table(:wiki_contents)
-> 0.0055s
-- add_index(:wiki_contents, :page_id, {:name=>:wiki_contents_page_id})
-> 0.0048s
-- create_table(:wiki_content_versions)
-> 0.0053s
-- add_index(:wiki_content_versions, :wiki_content_id, {:name=>:wiki_content_versions_wcid})
-> 0.0039s
== CreateWikiContents: migrated (0.0203s) ====================================
== AddProjectsFeedsPermissions: migrating ====================================
== AddProjectsFeedsPermissions: migrated (0.0083s) ===========================
== AddRepositoryRootUrl: migrating ===========================================
-- add_column(:repositories, :root_url, :string, {:limit=>255, :default=>""})
-> 0.0188s
== AddRepositoryRootUrl: migrated (0.0191s) ==================================
== CreateTimeEntries: migrating ==============================================
-- create_table(:time_entries)
-> 0.0068s
-- add_index(:time_entries, [:project_id], {:name=>:time_entries_project_id})
-> 0.0053s
-- add_index(:time_entries, [:issue_id], {:name=>:time_entries_issue_id})
-> 0.0039s
== CreateTimeEntries: migrated (0.0165s) =====================================
== AddTimelogPermissions: migrating ==========================================
== AddTimelogPermissions: migrated (0.0093s) =================================
== CreateChangesets: migrating ===============================================
-- create_table(:changesets)
-> 0.0047s
-- add_index(:changesets, [:repository_id, :revision], {:unique=>true, :name=>:changesets_repos_rev})
-> 0.0043s
== CreateChangesets: migrated (0.0093s) ======================================
== CreateChanges: migrating ==================================================
-- create_table(:changes)
-> 0.0049s
-- add_index(:changes, [:changeset_id], {:name=>:changesets_changeset_id})
-> 0.0043s
== CreateChanges: migrated (0.0097s) =========================================
== AddChangesetCommitDate: migrating =========================================
-- add_column(:changesets, :commit_date, :date)
-> 0.0222s
== AddChangesetCommitDate: migrated (0.0240s) ================================
== AddProjectIdentifier: migrating ===========================================
-- add_column(:projects, :identifier, :string, {:limit=>20})
-> 0.0241s
== AddProjectIdentifier: migrated (0.0244s) ==================================
== AddCustomFieldIsFilter: migrating =========================================
-- add_column(:custom_fields, :is_filter, :boolean, {:null=>false, :default=>false})
-> 0.0196s
== AddCustomFieldIsFilter: migrated (0.0199s) ================================
== CreateWatchers: migrating =================================================
-- create_table(:watchers)
-> 0.0052s
== CreateWatchers: migrated (0.0055s) ========================================
== CreateChangesetsIssues: migrating =========================================
-- create_table(:changesets_issues, {:id=>false})
-> 0.0046s
-- add_index(:changesets_issues, [:changeset_id, :issue_id], {:unique=>true, :name=>:changesets_issues_ids})
-> 0.0049s
== CreateChangesetsIssues: migrated (0.0098s) ================================
== RenameCommentToComments: migrating ========================================
== RenameCommentToComments: migrated (0.0070s) ===============================
== CreateIssueRelations: migrating ===========================================
-- create_table(:issue_relations)
-> 0.0058s
== CreateIssueRelations: migrated (0.0061s) ==================================
== AddRelationsPermissions: migrating ========================================
== AddRelationsPermissions: migrated (0.0125s) ===============================
== SetLanguageLengthToFive: migrating ========================================
-- change_column(:users, :language, :string, {:limit=>5, :default=>""})
-> 0.0301s
== SetLanguageLengthToFive: migrated (0.0304s) ===============================
== CreateBoards: migrating ===================================================
-- create_table(:boards)
-> 0.0052s
-- add_index(:boards, [:project_id], {:name=>:boards_project_id})
-> 0.0076s
== CreateBoards: migrated (0.0131s) ==========================================
== CreateMessages: migrating =================================================
-- create_table(:messages)
-> 0.0069s
-- add_index(:messages, [:board_id], {:name=>:messages_board_id})
-> 0.0098s
-- add_index(:messages, [:parent_id], {:name=>:messages_parent_id})
-> 0.0047s
== CreateMessages: migrated (0.0221s) ========================================
== AddBoardsPermissions: migrating ===========================================
== AddBoardsPermissions: migrated (0.0174s) ==================================
== AllowNullVersionEffectiveDate: migrating ==================================
-- change_column(:versions, :effective_date, :date, {:null=>true, :default=>nil})
-> 0.0212s
== AllowNullVersionEffectiveDate: migrated (0.0215s) =========================
== AddWikiDestroyPagePermission: migrating ===================================
== AddWikiDestroyPagePermission: migrated (0.0080s) ==========================
== AddWikiAttachmentsPermissions: migrating ==================================
== AddWikiAttachmentsPermissions: migrated (0.0125s) =========================
== AddProjectStatus: migrating ===============================================
-- add_column(:projects, :status, :integer, {:null=>false, :default=>1})
-> 0.0275s
== AddProjectStatus: migrated (0.0277s) ======================================
== AddChangesRevision: migrating =============================================
-- add_column(:changes, :revision, :string)
-> 0.0598s
== AddChangesRevision: migrated (0.0601s) ====================================
== AddChangesBranch: migrating ===============================================
-- add_column(:changes, :branch, :string)
-> 0.0222s
== AddChangesBranch: migrated (0.0224s) ======================================
== AddChangesetsScmid: migrating =============================================
-- add_column(:changesets, :scmid, :string)
-> 0.0283s
== AddChangesetsScmid: migrated (0.0286s) ====================================
== AddRepositoriesType: migrating ============================================
-- add_column(:repositories, :type, :string)
-> 0.0215s
== AddRepositoriesType: migrated (0.0239s) ===================================
== AddRepositoriesChangesPermission: migrating ===============================
== AddRepositoriesChangesPermission: migrated (0.0082s) ======================
== AddVersionsWikiPageTitle: migrating =======================================
-- add_column(:versions, :wiki_page_title, :string)
-> 0.0223s
== AddVersionsWikiPageTitle: migrated (0.0226s) ==============================
== AddIssueCategoriesAssignedToId: migrating =================================
-- add_column(:issue_categories, :assigned_to_id, :integer)
-> 0.0220s
== AddIssueCategoriesAssignedToId: migrated (0.0223s) ========================
== AddRolesAssignable: migrating =============================================
-- add_column(:roles, :assignable, :boolean, {:default=>true})
-> 0.0225s
== AddRolesAssignable: migrated (0.0228s) ====================================
== ChangeChangesetsCommitterLimit: migrating =================================
-- change_column(:changesets, :committer, :string, {:limit=>nil})
-> 0.0223s
== ChangeChangesetsCommitterLimit: migrated (0.0226s) ========================
== AddRolesBuiltin: migrating ================================================
-- add_column(:roles, :builtin, :integer, {:null=>false, :default=>0})
-> 0.0225s
== AddRolesBuiltin: migrated (0.0228s) =======================================
== InsertBuiltinRoles: migrating =============================================
== InsertBuiltinRoles: migrated (0.0148s) ====================================
== AddRolesPermissions: migrating ============================================
-- add_column(:roles, :permissions, :text)
-> 0.0230s
== AddRolesPermissions: migrated (0.0231s) ===================================
== DropPermissions: migrating ================================================
-- drop_table(:permissions)
-> 0.0042s
-- drop_table(:permissions_roles)
-> 0.0043s
== DropPermissions: migrated (0.0088s) =======================================
== AddSettingsUpdatedOn: migrating ===========================================
-- add_column(:settings, :updated_on, :timestamp)
-> 0.0223s
== AddSettingsUpdatedOn: migrated (0.0247s) ==================================
== AddCustomValueCustomizedIndex: migrating ==================================
-- add_index(:custom_values, [:customized_type, :customized_id], {:name=>:custom_values_customized})
-> 0.0051s
== AddCustomValueCustomizedIndex: migrated (0.0052s) =========================
== CreateWikiRedirects: migrating ============================================
-- create_table(:wiki_redirects)
-> 0.0043s
-- add_index(:wiki_redirects, [:wiki_id, :title], {:name=>:wiki_redirects_wiki_id_title})
-> 0.0038s
== CreateWikiRedirects: migrated (0.0084s) ===================================
== CreateEnabledModules: migrating ===========================================
-- create_table(:enabled_modules)
-> 0.0047s
-- add_index(:enabled_modules, [:project_id], {:name=>:enabled_modules_project_id})
-> 0.0046s
== CreateEnabledModules: migrated (0.0099s) ==================================
== AddIssuesEstimatedHours: migrating ========================================
-- add_column(:issues, :estimated_hours, :float)
-> 0.0224s
== AddIssuesEstimatedHours: migrated (0.0226s) ===============================
== ChangeAttachmentsContentTypeLimit: migrating ==============================
-- change_column(:attachments, :content_type, :string, {:limit=>nil})
-> 0.0224s
== ChangeAttachmentsContentTypeLimit: migrated (0.0226s) =====================
== AddQueriesColumnNames: migrating ==========================================
-- add_column(:queries, :column_names, :text)
-> 0.0226s
== AddQueriesColumnNames: migrated (0.0229s) =================================
== AddEnumerationsPosition: migrating ========================================
-- add_column(:enumerations, :position, :integer, {:default=>1})
-> 0.0232s
== AddEnumerationsPosition: migrated (0.0262s) ===============================
== AddEnumerationsIsDefault: migrating =======================================
-- add_column(:enumerations, :is_default, :boolean, {:null=>false, :default=>false})
-> 0.0217s
== AddEnumerationsIsDefault: migrated (0.0219s) ==============================
== AddAuthSourcesTls: migrating ==============================================
-- add_column(:auth_sources, :tls, :boolean, {:null=>false, :default=>false})
-> 0.0214s
== AddAuthSourcesTls: migrated (0.0215s) =====================================
== AddMembersMailNotification: migrating =====================================
-- add_column(:members, :mail_notification, :boolean, {:null=>false, :default=>false})
-> 0.0220s
== AddMembersMailNotification: migrated (0.0223s) ============================
== AllowNullPosition: migrating ==============================================
-- change_column(:issue_statuses, :position, :integer, {:null=>true, :default=>1})
-> 0.0176s
-- change_column(:roles, :position, :integer, {:null=>true, :default=>1})
-> 0.0162s
-- change_column(:trackers, :position, :integer, {:null=>true, :default=>1})
-> 0.0144s
-- change_column(:boards, :position, :integer, {:null=>true, :default=>1})
-> 0.0269s
-- change_column(:enumerations, :position, :integer, {:null=>true, :default=>1})
-> 0.0147s
== AllowNullPosition: migrated (0.0908s) =====================================
== RemoveIssueStatusesHtmlColor: migrating ===================================
-- remove_column(:issue_statuses, :html_color)
-> 0.1774s
== RemoveIssueStatusesHtmlColor: migrated (0.1778s) ==========================
== AddCustomFieldsPosition: migrating ========================================
-- add_column(:custom_fields, :position, :integer, {:default=>1})
-> 0.0233s
== AddCustomFieldsPosition: migrated (0.0257s) ===============================
== AddUserPreferencesTimeZone: migrating =====================================
-- add_column(:user_preferences, :time_zone, :string)
-> 0.0226s
== AddUserPreferencesTimeZone: migrated (0.0229s) ============================
== AddUsersType: migrating ===================================================
-- add_column(:users, :type, :string)
-> 0.0226s
== AddUsersType: migrated (0.0279s) ==========================================
== CreateProjectsTrackers: migrating =========================================
-- create_table(:projects_trackers, {:id=>false})
-> 0.0046s
-- add_index(:projects_trackers, :project_id, {:name=>:projects_trackers_project_id})
-> 0.0049s
== CreateProjectsTrackers: migrated (0.0107s) ================================
== AddMessagesLocked: migrating ==============================================
-- add_column(:messages, :locked, :boolean, {:default=>false})
-> 0.0236s
== AddMessagesLocked: migrated (0.0238s) =====================================
== AddMessagesSticky: migrating ==============================================
-- add_column(:messages, :sticky, :integer, {:default=>0})
-> 0.0399s
== AddMessagesSticky: migrated (0.0401s) =====================================
== ChangeAuthSourcesAccountLimit: migrating ==================================
-- change_column(:auth_sources, :account, :string, {:limit=>nil})
-> 0.1165s
== ChangeAuthSourcesAccountLimit: migrated (0.1167s) =========================
== AddRoleTrackerOldStatusIndexToWorkflows: migrating ========================
-- add_index(:workflows, [:role_id, :tracker_id, :old_status_id], {:name=>:wkfs_role_tracker_old_status})
-> 0.0044s
== AddRoleTrackerOldStatusIndexToWorkflows: migrated (0.0046s) ===============
== AddCustomFieldsSearchable: migrating ======================================
-- add_column(:custom_fields, :searchable, :boolean, {:default=>false})
-> 0.0236s
== AddCustomFieldsSearchable: migrated (0.0239s) =============================
== ChangeProjectsDescriptionToText: migrating ================================
-- change_column(:projects, :description, :text, {:null=>true, :default=>nil})
-> 0.0241s
== ChangeProjectsDescriptionToText: migrated (0.0244s) =======================
== AddCustomFieldsDefaultValue: migrating ====================================
-- add_column(:custom_fields, :default_value, :text)
-> 0.0217s
== AddCustomFieldsDefaultValue: migrated (0.0220s) ===========================
== AddAttachmentsDescription: migrating ======================================
-- add_column(:attachments, :description, :string)
-> 0.0235s
== AddAttachmentsDescription: migrated (0.0238s) =============================
== ChangeVersionsNameLimit: migrating ========================================
-- change_column(:versions, :name, :string, {:limit=>nil})
-> 0.0235s
== ChangeVersionsNameLimit: migrated (0.0237s) ===============================
== ChangeChangesetsRevisionToString: migrating ===============================
-- change_column(:changesets, :revision, :string, {:null=>false})
-> 0.0214s
== ChangeChangesetsRevisionToString: migrated (0.0216s) ======================
== ChangeChangesFromRevisionToString: migrating ==============================
-- change_column(:changes, :from_revision, :string)
-> 0.0244s
== ChangeChangesFromRevisionToString: migrated (0.0246s) =====================
== AddWikiPagesProtected: migrating ==========================================
-- add_column(:wiki_pages, :protected, :boolean, {:null=>false, :default=>false})
-> 0.0241s
== AddWikiPagesProtected: migrated (0.0243s) =================================
== ChangeProjectsHomepageLimit: migrating ====================================
-- change_column(:projects, :homepage, :string, {:limit=>nil, :default=>""})
-> 0.0236s
== ChangeProjectsHomepageLimit: migrated (0.0238s) ===========================
== AddWikiPagesParentId: migrating ===========================================
-- add_column(:wiki_pages, :parent_id, :integer, {:default=>nil})
-> 0.0235s
== AddWikiPagesParentId: migrated (0.0237s) ==================================
== AddCommitAccessPermission: migrating ======================================
== AddCommitAccessPermission: migrated (0.0009s) =============================
== AddViewWikiEditsPermission: migrating =====================================
== AddViewWikiEditsPermission: migrated (0.0010s) ============================
== SetTopicAuthorsAsWatchers: migrating ======================================
== SetTopicAuthorsAsWatchers: migrated (0.0033s) =============================
== AddDeleteWikiPagesAttachmentsPermission: migrating ========================
== AddDeleteWikiPagesAttachmentsPermission: migrated (0.0008s) ===============
== AddChangesetsUserId: migrating ============================================
-- add_column(:changesets, :user_id, :integer, {:default=>nil})
-> 0.0272s
== AddChangesetsUserId: migrated (0.0274s) ===================================
== PopulateChangesetsUserId: migrating =======================================
== PopulateChangesetsUserId: migrated (0.0004s) ==============================
== AddCustomFieldsEditable: migrating ========================================
-- add_column(:custom_fields, :editable, :boolean, {:default=>true})
-> 0.0245s
== AddCustomFieldsEditable: migrated (0.0248s) ===============================
== SetCustomFieldsEditable: migrating ========================================
== SetCustomFieldsEditable: migrated (0.0032s) ===============================
== AddProjectsLftAndRgt: migrating ===========================================
-- add_column(:projects, :lft, :integer)
-> 0.0225s
-- add_column(:projects, :rgt, :integer)
-> 0.0240s
== AddProjectsLftAndRgt: migrated (0.0471s) ==================================
== BuildProjectsTree: migrating ==============================================
== BuildProjectsTree: migrated (0.0046s) =====================================
== RemoveProjectsProjectsCount: migrating ====================================
-- remove_column(:projects, :projects_count)
-> 0.0264s
== RemoveProjectsProjectsCount: migrated (0.0266s) ===========================
== AddOpenIdAuthenticationTables: migrating ==================================
-- create_table(:open_id_authentication_associations, {:force=>true})
-> 0.0067s
-- create_table(:open_id_authentication_nonces, {:force=>true})
-> 0.0076s
== AddOpenIdAuthenticationTables: migrated (0.0148s) =========================
== AddIdentityUrlToUsers: migrating ==========================================
-- add_column(:users, :identity_url, :string)
-> 0.0231s
== AddIdentityUrlToUsers: migrated (0.0234s) =================================
== AddWatchersUserIdTypeIndex: migrating =====================================
-- add_index(:watchers, [:user_id, :watchable_type], {:name=>:watchers_user_id_type})
-> 0.0045s
== AddWatchersUserIdTypeIndex: migrated (0.0046s) ============================
== AddQueriesSortCriteria: migrating =========================================
-- add_column(:queries, :sort_criteria, :text)
-> 0.0235s
== AddQueriesSortCriteria: migrated (0.0238s) ================================
== AddProjectsTrackersUniqueIndex: migrating =================================
-- add_index(:projects_trackers, [:project_id, :tracker_id], {:unique=>true, :name=>:projects_trackers_unique})
-> 0.0042s
== AddProjectsTrackersUniqueIndex: migrated (0.0051s) ========================
== ExtendSettingsName: migrating =============================================
-- change_column(:settings, :name, :string, {:limit=>255, :null=>false, :default=>""})
-> 0.0132s
== ExtendSettingsName: migrated (0.0134s) ====================================
== AddTypeToEnumerations: migrating ==========================================
-- add_column(:enumerations, :type, :string)
-> 0.0233s
== AddTypeToEnumerations: migrated (0.0235s) =================================
== UpdateEnumerationsToSti: migrating ========================================
== UpdateEnumerationsToSti: migrated (0.0010s) ===============================
== AddQueriesGroupBy: migrating ==============================================
-- add_column(:queries, :group_by, :string)
-> 0.0240s
== AddQueriesGroupBy: migrated (0.0241s) =====================================
== CreateMemberRoles: migrating ==============================================
-- create_table(:member_roles)
-> 0.0052s
== CreateMemberRoles: migrated (0.0054s) =====================================
== PopulateMemberRoles: migrating ============================================
== PopulateMemberRoles: migrated (0.0011s) ===================================
== DropMembersRoleId: migrating ==============================================
-- remove_column(:members, :role_id)
-> 0.0177s
== DropMembersRoleId: migrated (0.0179s) =====================================
sio4@ubuntu:/opt/redmine$
sio4@ubuntu:/opt/redmine$ rake redmine:load_default_data RAILS_ENV=production
(in /opt/redmine)
Select language: bg, bs, ca, cs, da, de, en, es, fi, fr, gl, he, hu, it, ja, ko, lt, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh, zh-TW [en] ko
====================================
Default configuration data loaded.
sio4@ubuntu:/opt/redmine$
다음은 보안을 위한 session 정보 생성. 전에 없던 것인데…
sio4@ubuntu:/opt/redmine$ rake config/initializers/session_store.rb
(in /opt/redmine)
sio4@ubuntu:/opt/redmine$
끝! 이제 돌려보자!
sio4@ubuntu:/opt/redmine$ ruby script/server webrick -e production -p 7180
=> Booting WEBrick...
=> Rails 2.2.2 application started on http://0.0.0.0:7180
=> Ctrl-C to shutdown server; call with --help for options
[2009-06-11 23:57:09] INFO WEBrick 1.3.1
[2009-06-11 23:57:09] INFO ruby 1.8.7 (2008-08-11) [x86_64-linux]
[2009-06-11 23:57:09] INFO WEBrick::HTTPServer#start: pid=3114 port=7180
<...>
^C[2009-06-11 23:59:35] INFO going to shutdown ...
[2009-06-11 23:59:36] INFO WEBrick::HTTPServer#start done.
또는, mongrel을 써보자
$ sudo apt-get install mongrel
$ mongrel_rails start -d -e production -p 7080
sio4@mykm:/opt/redmine$ sudo apt-get install mongrel
[sudo] password for sio4:
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 패키지를 더 설치할 것입니다:
libdaemons-ruby libdaemons-ruby1.8 libgemplugin-ruby libgemplugin-ruby1.8
제안하는 패키지:
rails mongrel-doc
다음 새 패키지를 설치할 것입니다:
libdaemons-ruby libdaemons-ruby1.8 libgemplugin-ruby libgemplugin-ruby1.8
mongrel
0개 업그레이드, 5개 새로 설치, 0개 지우기 및 2개 업그레이드 안 함.
108k바이트 아카이브를 받아야 합니다.
이 작업 후 881k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까 [Y/n]?
...
sio4@mykm:/opt/redmine$ mongrel_rails start -h
Usage: mongrel_rails <command> [options]
-e, --environment ENV Rails environment to run as
-d, --daemonize Run daemonized in the background
-p, --port PORT Which port to bind to
-a, --address ADDR Address to bind to
-l, --log FILE Where to write log messages
-P, --pid FILE Where to write the PID
-n, --num-processors INT Number of processors active before clients denied
-o, --timeout TIME Time to wait (in seconds) before killing a stalled thread
-t, --throttle TIME Time to pause (in hundredths of a second) between accepting clients
-m, --mime PATH A YAML file that lists additional MIME types
-c, --chdir PATH Change to dir before starting (will be expanded)
-r, --root PATH Set the document root (default 'public')
-B, --debug Enable debugging mode
-C, --config PATH Use a config file
-S, --script PATH Load the given file as an extra config script
-G, --generate PATH Generate a config file for use with -C
--user USER
User to run as
--group GROUP
Group to run as
--prefix PATH
URL prefix for Rails app
-h, --help Show this message
--version Show version
sio4@mykm:/opt/redmine$ mongrel_rails start -d -e production -p 7080
sio4@mykm:/opt/redmine$