Redmine 是一套好用的軟體專案管理系統。有多好用呢?請 Google 一下就知道了。
為了建立屬於自己專屬的 Redmine,我設法在 Heroku 部署 Redmine 1.1-stable。雖然網路上有許多教學,但剛剛參考了這一篇 ,遇到一些問題。所以我把步驟寫下來。這篇文章的內容是整合 Heroku 的部署文件及 Redmine 的安裝文件 。
Update : 隔天我找到一篇很詳盡的 Step by Step ,包括 Amazon S3。
Heroku 是 Ruby Web application hosting,所以你的系統內要有 Ruby Runtime 。同時也得安裝 Rubygems 。Heroku 是以 Git 版本控制系統來管理程式原始碼的,當然要安裝 Git。
然後是必要的 Gems,以下會使用到 Bundler 這個方便的 per-application gem 管理工具(其實還有別的,但靠它就可以安裝別的了)。要部署 Ruby 網頁應用程式到 Heroku ,首先當然要去辦 Heroku 帳號,並安裝 Heroku 專屬的 gem。濃縮成一行指令就是:
gem install bundler heroku
詳情請參考 Heroku 的 Getting Started 文件 。
Redmine 是採用 SVN 版本控制系統,下載方式請參考 Redmine 的說明 。目前最新的穩定版是 1.1-stable,所以我根據官網上面寫的指令,將 Redmine 1.1-stable 抓下來:
svn co http://redmine.rubyforge.org/svn/branches/1.1-stable redmine-1.1
這會把 Redmine 1.1-stable 的原始碼 checkout 到 redmine-1.1
這個資料夾中。
Gemfile
是 Bundler 用來辯識所需要的 Gems 的檔案設定檔,也可以讓 Heroku 在程式碼被 push 到 remote 時,自動安裝 Gemfile
裡所指定的 Gems。在 Heroku 的應用與操作方法詳見官網說明 。
新增檔案 Gemfile
,內容如下:
source :gemcutter gem 'rails', '2.3.5' gem 'i18n', '0.4.2'
然後執行
bundle install
可能會要求你輸入當前使用者密碼。
這樣子就會把 Rails 2.3.5 及其 dependencies 、i18n 0.4.2 這些 gems 安裝起來,並且產生Gemfile.lock
檔案。
session_store.rb
session_store.rb
是用來定義 Rails Session 參數,與登入機制有關,但因為牽涉到 Cookie 產生的參數,所以不會放進 repository 中,我們要自己產生。方法是
rake generate_session_store
雖然是部署到 Heroku,本機資料庫是什麼樣子應該無所謂,但因為其中一個 Migration 會建立 public/plugin_assets/README
,沒有這個檔案的話,Heroku 的 Migration 會出錯,因為 Heroku 不允許檔案系統的操作。所以我們先自己建好,再一併放進 Git repository 中,以防出錯。
首先要設定本機資料庫,先從範例檔複製出來:
cp config/database.yml.example config/database.yml
再修改 config/database.yml
,使其僅保留 development
的設定(Heroku 會自行連接 Database):
development: adapter: sqlite3 database: db/development.db
完成後,初始化本機的 Database :
rake db:migrate
如前文所述,Heroku 採用 Git 管理部署到雲端的程式碼,所以要讓 Git 管理 Redmine 的程式碼才行。
在建立 Git repository 之前,先修改一下 .gitignore
檔案(讓 Git 永遠忽略符合指定 pattern 的檔案),刪除兩行:
/config/initializers/session_store.rb
/public/plugin_assets
然後加入這一行:
.svn
以上的異動說明如下:
session_store.rb
,SVN tree 中沒這個檔案,在上文已經自行產生,必須讓它被部署到 Heroku ,應用程式才能運作。public/plugin_assets
,SVN tree 中沒這個資料夾,在上文已經自行產生,往後安裝 Plug-in 的時候會用到,但因為我們只能在本機操作 Plug-in 的新增與刪除,不能在 Heroku 操作,所以這個資料夾當然也要給 Git 監視。.svn
是 SVN 記錄 local checkout 某資料夾的 metadata 所使用,為了保留往後可以從 Redmine SVN repository 新版程式的方便,這裡不予刪除,但因為它不屬於 Git 所管理的範圍,所以要把它加入 .gitignore
中。執行
git init
git add .
git commit -m 'initial commit'
到此為止,Redmine 已經準備好可以送上 Heroku 的雲端伺服器了。
執行
heroku create
會由 Heroku 挑一個名字給你,並且告訴你該 App 的網址為何。如果你要指定名字的話,就是
heroku create dance-okok
這樣會建立名為 dance-okok
的 Heroku application,前提是這個名字沒有別人用走。
git push heroku master
於是你的程式碼就送到 Heroku 的伺服器了,並且會根據 Gemfile
中的描述,將必備的 Gems 安裝在 Heroku 給你的虛擬空間裡面。
雖然在前文中,已經初始化本機資料庫了,但畢竟在 Heroku 上的資料庫還是空的,所以一樣要初始化:
heroku rake db:migrate
至此,Redmine 的部署已經完成了。請用瀏覽器連至剛剛得到的網址,如果有指定名字的話,像前面的 dance-okok
,就會是 http://dance-okok.heroku.com/
。
預設的管理員帳號 admin
,密碼 admin
。
Redmine 的官方說明文件中,還要求載入預設資料 (rake redmine:load_default_data
),不過我試了發現 Heroku 會產生錯誤,似乎是因為透過鍵盤選語言的時候,Heroku 不允許我和遠端的 console 互動,所以吃了一記 nil
。
幸好 Redmine 初次進入管理介面時,會偵測有無載入預設資料,你可以登入 Redmine 的後台(以管理員登入,按一下左上角的 Administration),它會問你要不要載入預設資料,還能選語言。
接著是如何讓 Redmine 支援 SSL,及強制進入 SSL (嚴格檢查通訊協定)。
from: http://blog.yorkxin.org/2011/03/08/redmine-1-1-on-heroku/