記錄在配置Redmine郵件同步過程中遇到的各種問題與解決方案
1. 如何安裝Redmine
http://www.redmine.org/projects/redmine/wiki/RedmineInstall
2. 如何配置自動郵件收取和定時同步
Windows下:http://www.redmine.org/projects/redmine/wiki/How_to_install_Redmine_in_Linux_Windows_and_OS_X_using_BitNami_Redmine_Stack
類Unix環境下:http://www.redmine.org/projects/redmine/wiki/RedmineReceivingEmails#Forwarding-emails-from-your-email-server
由於我主要是用Mac下配置的,下面主要為Mac下的命令。在其他動作系統下可能會略有不同
由於郵件伺服器不是自己架設的,只能用imap或pop3同步的方法。
測試下來pop3同步QQ企業郵箱可能會有問題,於是採用了imap
3. Rake
自動收郵件的方法redmine:email:receive_imap需要rake來運行
關於什麼是rake:
Rake中文介紹
http://hi.baidu.com/kenrome/item/0b178757da9c24948d12ed39
Rake官方文檔
http://rake.rubyforge.org/
4. 運行rake的條件
運行rake首先要找到Rakefile所在的檔案夾
對於BitNami的Redmine,安裝目錄在:/Applications/redmine-2.3.0-0/apps/redmine/htdocs
運行rake的時候如果遇到如下error:
rake aborted!
no such file to load - bundler/setup
說明bundle沒裝好
這時候就需要運行命令來安裝bundle
5. 安裝bundle
在Terminal裡執行下列命令即可安裝Bundle:
gem install bundler
bundle install
bundle exec rake db:create
如果要知道什麼是bundle,可以查看連結:
http://guides.rubyonrails.org/getting_started.html#creating-a-new-rails-project
http://stackoverflow.com/questions/7454361/rubygems-do-not-install-on-os-x-lion
裝Bundle的時候可能遇到各種Error
我遇到過的有:
1. Json錯誤,靠stackoverflow錯誤資訊解決
2. 安裝rmagick錯誤
rmagick是最頭疼的一個錯誤,是由於rmagick 2.13.1版本的一個不相容的問題導致。雖然2.13.2版本裡修正了,但是bundle本身不能選擇版本,只能自動安裝2.13.1
修正方法:
http://stackoverflow.com/questions/13942443/error-installing-rmagick-on-mountain-lion/13960185#13960185
裡面的路徑可能會需要修改為/Users/<username>/.homebrew/Cellar/imagemagick/6.8.0-10/lib
運行bundle exec rake db:create可能也會遇到如下Error:
image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
解決方案:
http://stackoverflow.com/questions/8437455/rake-dbmigrate-mysql
簡單的方法是:在運行所有Terminal方法前,運行一下:export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
永久解決方案是修改 .bash_profile
6. 運行rake
Redmine測試帳號
redmine.test@honestwalker.com
Password01!
如果要直接在Terminal裡啟動並執行話,先運行
cd /Applications/redmine-2.3.0-0/apps/redmine/htdocs
再運行
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"
最後運行
bundle exec rake --silent redmine:email:receive_imap unknown_user=accept no_permission_check=1 RAILS_ENV="production" host=imap.exmail.qq.com port=993 username=redmine.test@honestwalker.com password=******* ssl=1 project=testproject1 tracker=Support
可能會報一些編碼問題,不過可以無視
(SSL可能是必須的,之前不用SSL似乎沒有正確收取)
7. 定時運行
類Unix系統下的定時運行是用cron
關於cron的介紹可參見:
cron定時任務(類Unix系統)中文介紹
http://www.blogjava.net/chenlb/archive/2008/07/02/212123.html
簡單地說:
crontab -e是修改cron的任務
crontab -l是查看已建立的cron任務
crontab -r是刪除所有cron任務
如果要用cron執行一句文法的範例可參見:
*/30 * * * * cd /Applications/redmine-2.3.0-0/apps/redmine/htdocs
由於cron下執行任務都只能執行一行,但實際需要執行三行,所以需要用osascript(Mac下的指令碼)
8. osascript
osascript的文法類似:
osascript -e 'tell application "terminal"' -e 'do script "cd / cd /"' -e 'end tell'
分號可以用來間隔命令,在同一個Terminal視窗執行多個命令
所以最終的osascript命令為:
osascript -e 'tell application "terminal"' -e 'do script "cd /Applications/redmine-2.3.0-0/apps/redmine/htdocs;export DYLD_LIBRARY_PATH=\"/usr/local/mysql/lib:$DYLD_LIBRARY_PATH\";bundle exec rake --silent redmine:email:receive_imap unknown_user=accept no_permission_check=1 RAILS_ENV=\"production\" host=imap.exmail.qq.com port=993 username=redmine.test@honestwalker.com password=****** ssl=1 project=testproject1 tracker=Support"' -e 'end tell'
9. 結果
執行以下命令
*/30 * * * * osascript -e 'tell application "terminal"' -e 'do script "cd /Applications/redmine-2.3.0-0/apps/redmine/htdocs;export DYLD_LIBRARY_PATH=\"/usr/local/mysql/lib:$DYLD_LIBRARY_PATH\";bundle exec rake --silent redmine:email:receive_imap unknown_user=accept no_permission_check=1 RAILS_ENV=\"production\" host=imap.exmail.qq.com port=993 username=redmine.test@honestwalker.com password=****** ssl=1 project=testproject1
tracker=Support"' -e 'end tell'
就完成了。