December 16, 2015

Install Redmine 3.1 on Heroku

當員工的時候有主管盯進度,一旦沒人盯進度,一開始可能覺得很輕鬆,但很快就會開始惶恐,覺得自己超時又落後,被內心壓力逼的喘不過來。但有時候又好像還好。沒有一把尺在旁邊,總是很準確難掌握效率。要不抓太緊,要不就放太鬆。

以前公司用的是Mantis。一些案子也試著用過Trello。另外也還有很多林林總總的專案管理工具。不過老實說,既然都入門ROR了,再說還有大神推薦,那當然是要用用Redmine的啦。

先說結論。Redmine在對我們團隊帶來的好處絕對是超高的。有一個地方可以集中管理該做的事,每天坐下來不必回想什麼案子做到哪,今天要從哪裡開始,只要打開Redmine自然列出所有該做的專案,該解的issue。上班變成登入"工作Online",開票、解任務,每天都超有幹勁的啦!

其實Redmine也已經用一段時間了,當初是架在AWS的EC2上面,選擇bitnami的solution懵懵懂懂的就灌好啟用了。陸續灌了一些plugin跟theme,開心的使用到現在。

如果是Rails開發者要順利安裝啟用應該蠻不成問題的。只不過若沒有相關背景就比較辛苦一點了。若沒有相關背景,也可以先用Plan.io試試,總之可以無痛先開始使用,試下確定沒問題,再花力氣研究如何安裝,也比較不會白走冤枉路。

安裝在EC2是有他的好處,不過一年試用到期之後就得另外想辦法了。另一個選擇則是安裝到Heroku上。Heroku的免費版限制應該算很夠使用的了。不過怪的是網路上東翻西找的文章都是一些很舊的內容,照做多半還是有些小問題,在這邊再重新整理一下。
基本上是照Redmine的wiki上那篇[註1]做的。

1. git clone目前的stable版本3.1
$git clone https://github.com/redmine/redmine.git -b 3.1-stable

2. 進入redmine資料夾
$cd redmine

3. 從.gitignore中移除這幾行
Gemfile.lock
Gemfile.local
public/plugin_assets
config/initializers/session_store.rb
config/initializers/secret_token.rb
config/configuration.yml
config/email.yml

4. 照他說的,把Gimfile中底下這個code block刪掉
database_file = File.join(File.dirname(__FILE__), "config/database.yml")
if File.exist?(database_file)
database_config = YAML::load(ERB.new(IO.read(database_file)).result)

...

else
warn("No adapter found in config/database.yml, please configure it first")
end
else
warn("Please configure your config/database.yml first")
end

然後加入底下這段
group :production do
# gems specifically for Heroku go here
gem "pg", ">= 0.11.0"
end

5. 執行bundle install
$bundle install

6. 產生secret token
$bundle exec rake generate_secret_token

7. 產生一個heroku app
$heroku create NAME_FOR_YOUR_APP

8. 從config/environment.rb把這行刪掉
exit 1

9. 在config/application.rb中如下加入config.assets.initialize_on_precompile = false
...
12: module RedmineApp
13: class Application < Rails::Application
14: config.assets.initialize_on_precompile = false
15: # Settings in config/environments/* take precedence over those specified here. ...

就是在這一步出現問題。

接著做後面的git add/commit/push到heroku之後,出現類似以下錯誤
-----> Preparing app for Rails asset pipeline
       Running: rake assets:precompile
       rake aborted!
       PG::ConnectionBad: could not connect to server: Connection refused
       Is the server running on host "127.0.0.1" and accepting
       TCP/IP connections on port 5432?

查了半天有點不解。明明已經跟他說不要precompile了,但似乎仍然會做precompile的動作,然後因為db是需要在heroku上面建立的,所以連線連不到db,deploy就失敗了...網路上查都沒有看到人家寫這一段,感覺沒什麼道理 @@" 只能猜測是heroku的行為有改變,所以才造成的吧....

後來的解法是,直接到heroku的控制台上,手動替這個app開啟一個pg的database。登入Heroku後,找到剛剛建立的app,在Resource頁簽底下有Add-ons,輸入Heroku Postgres增加一個。然後再回終端機進行push等等動作,就可以順利進行了~ QQ
10. commit/push
$git add -A
$git commit -m “preparing for heroku”
$git push heroku 3.1-stable:master

11. 記得要先執行rake db的部份
$heroku run rake db:migrate
$heroku run rake redmine:load_default_data

12. 芝麻開門
$heroku open


預設管理員帳號密碼為Admin/Admin,就大功告成囉~



同場加映
Email的設定就也沒什麼特別的。
先同樣在heroku的add-ons啟用Sendgrid。

在config/configuration.yml加入以下設定
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.sendgrid.net"
port: 25
authentication: :plain
domain: "heroku.com"
user_name: <%= ENV['SENDGRID_USERNAME'] %>
password: <%= ENV['SENDGRID_PASSWORD'] %>

username跟password在heroku設定中可以找到。

然後同樣再commit/push上去就可以使用囉~


參考資料:
1. HowTo Install Redmine (> 2.5.x) on Heroku

0 Comments: