Redmine 1.x升级到2.0.3

本来想按步骤再再写写Redmine的这个升级故事的1.x到2.0.3,还特别找了以下文章内容,以期参考:

Redmine v1.4.x 升級到 Redmine v2.0.x 的升級步驟

基本更新步驟:
切換到安裝目錄:
cd /home/apps
備份舊有的資料:
mv redmine redmine_bak
取得最新的程式:
/usr/local/bin/svn co http://redmine.rubyforge.org/svn/branches/2.0-stable redmine
複製資料庫設定、上傳檔案、Theme:
cp /home/apps/redmine_bak/config/database.yml /home/apps/redmine/config/
cp -ai /home/apps/redmine_bak/files/* /home/apps/redmine/files/
cp -ai /home/apps/redmine_bak/public/themes/* /home/apps/redmine/public/themes/
Plugins:先不要安裝與更新,等下面步驟完成後再來處理。
切換到 redmine 根目錄中:
cd redmine
更新 RubyGem:
gem update –system
檢查並更新 gems:
bundle install –without development test postgresql
Generate a session store secret:
rake generate_secret_token
更新 Database Schema:
rake db:migrate RAILS_ENV=production
更新 Plugins 的 Database Schema:
rake redmine:plugins:migrate RAILS_ENV=production
清除 cache:
rake tmp:cache:clear
rake tmp:sessions:clear
啟動 WEBrick web server 來進行測試:
ruby script/rails server webrick -e production
更新 Plugins:¶
Redmine V2.0.x 的 Plugins 目錄從 Redmine V1.x 的 /vendor/plugins 移到 /plugins。
建議的更新方式是一個一個慢慢來,更新完成再進行下一個。
更新流程:(安裝一個 plugin 後,執行 3-5 步驟,確認沒有錯誤後,再安裝下一個 plugin)
切換到 redmine 根目錄中:
cd redmine
檢查並更新 gems (非必要,除非有提醒再執行):
bundle install –without development test postgresql
安裝一個 Plugin:
更新 Database Schema:
rake db:migrate RAILS_ENV=production
更新 Plugins 的 Database Schema:
rake redmine:plugins:migrate RAILS_ENV=production
啟動 WEBrick web server 來進行測試:
ruby script/rails server webrick -e production

如何将Turnkey Redmine 虚拟机从Redmine 1.0.5 升级到1.2

#0
/etc/init.d/apache2 stop
#1
cd /var/www
#2
mv railsapp railsappOLD
#3
svn co http://redmine.rubyforge.org/svn/branches/1.2-stable railsapp
#4
cp ./railsappOLD/config/database.yml ./railsapp/config/database.yml
#5
cp ./railsappOLD/config/email.yml ./railsapp/config/email.yml
#6
cp -r ./railsappOLD/files ./railsapp/filesrak
#7
sudo chown -R root:www-data /var/www/railsapp
#8
cd /var/www/railsapp
#9 (inside the /var/www/railsapp folder)
sudo chown -R www-data:www-data files log tmp
#10 (this command takes a little time – be patient)
gem install rails -v=2.3.11
#11
gem install rack
#12
gem install rack -v=1.1.1
#13 (inside the /var/www/railsapp folder)
rake generate_session_store
#14 (inside the /var/www/railsapp folder)
rake db:migrate RAILS_ENV=production
#15 (inside the /var/www/railsapp folder)
sudo chown -R www-data:www-data files log tmp public/plugin_assets
#16 (inside the /var/www/railsapp folder)
rake db:migrate:upgrade_plugin_migrations RAILS_ENV=production
#17 (inside the /var/www/railsapp folder)
rake db:migrate_plugins RAILS_ENV=production
#18
sudo chmod -R 755 files log/ tmp/ public/plugin_assets
#19 (inside the /var/www/railsapp folder)
rake tmp:cache:clear
#20 (inside the /var/www/railsapp folder)
rake tmp:sessions:clear
#21
/etc/init.d/apache2 start

后来发现如果按说明基本没有什么问题。以下一些内容算是一些参照索引吧:

1. 需要bundler:gem install bundler

2. 安装 Redmine 1.4 ,用Ubuntu Server 11.10
3. How to Install Redmine 2.0.1 on Ubuntu 12.04

# tasksel install lamp-server

# apt-get install ruby-full libmysqlclient-dev libmagickwand-dev libapache2-mod-passenger

# wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.24.tgz
# tar xzvf rubygems-1.8.24.tgz
# cd rubygems-1.8.24
# ruby stup.rb

# ln -s /usr/bin/gem1.8 /usr/bin/gem

# gem install bundler

# wget http://files.rubyforge.vm.bytemark.co.uk/redmine/redmine-2.0.1.tar.gz
# tar xzvf redmine-2.0.1.tar.gz
# mv redmine-2.0.1.tar.gz redmine
# mv redmine /var/www/redmine
# cd /var/www/redmine

# bundle install –without development test postgresql sqlite

# mysql -u root -p
create database redmine character set utf8;
create user ‘redmine’@’localhost’ identified by ‘my_password’;
grant all privileges on redmine.* to ‘redmine’@’localhost’;

# vi config/database.yml
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: password

# rake generate_secret_token

# RAILS_ENV=production rake db:migrate

# RAILS_ENV=production rake redmine:load_default_data

# vi /etc/apache2/mods-available/passenger.conf
PassengerDefaultUser www-data

# vi /etc/apache2/sites-available/default
DocumentRoot /var/www/redmine/public

RailsBaseURI /redmine

# a2enmod passenger

# mkdir redmine/public/plugin_assets
# chown -R www-data:www-data redmine/
# chmod -R 755 redmine/
# chmod -R 777 redmine/public/plugin_assets
# chmod -R 777 redmine/files

# service apache2 restart

4. 其实还需要安装安装以下包:

libmysqlclient-dev

libmagickcore-dev

libmagickwand-dev

postgresql-server-dev-8.4

libsqlite3-dev

5. 运行时需要:

mkdir -p ./tmp/pids
touch log/produciton.log
chmod 0666 log/production.log
mkdir -p public/plugin_assets

6. 重要的参考:Upgrading

generate_secret_token

http://www.redmine.org/boards/2/topics/30624
Solved 🙂 problem is passenger module .

1) gem install passenger
2) passenger-install-apache2-module
3).1 vi /etc/apache2/mods_enabled/passenger.load
#change module path to :
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
.2 vi /etc/apache2/mods_enabled/passenger.conf
#change conf to

PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.12
PassengerRuby /usr/bin/ruby1.8
configuration options provided by passenger-install-command. module path may change by time becouse of version

>>>>
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-3.0.15/ext/apache2/mod_passenger.so << 这行是要加在passenger.load里的,否则只会列出当前目录文件的列表

PassengerRoot /var/lib/gems/1.8/gems/passenger-3.0.15
PassengerRuby /usr/bin/ruby1.8

7. 其它参考:

http://antontw.blogspot.com/2008/11/linux-svn-http-mysql-auth.html
http://www.debuntu.org/2006/05/20/54-how-to-subversion-svn-with-apache2-and-dav
http://www.linuxidc.com/Linux/2012-07/66234.htm

http://code.google.com/p/mod-auth-external/wiki/Installation

8. 原来创建的视图有些小问题了,主要是现在这样的内容需要自己生成或者自己去个性dav_svn配置。

CREATE VIEW users_auth_external AS SELECT u.login AS username, u.hashed_password AS passwd, GROUP_CONCAT(CONCAT(CONCAT(p.identifier, '_'), r.name)) AS groups FROM `members` m INNER JOIN users u ON m.user_id = u.id INNER JOIN projects p ON m.project_id = p.id INNER JOIN member_roles mr ON mr.member_id = m.id INNER JOIN roles r ON mr.role_id = r.id WHERE u.status = 1 GROUP BY username;

9. 还是参考:

http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl 注:新的验证方法用这个配置还是方便,改mysql_auth的源码也是一个方案

http://serverfault.com/questions/355503/svn-authentication-over-apache-dav-and-redmine-not-work

http://www.redmine.org/boards/2/topics/3597?r=3827

http://www.redmine.org/projects/redmine/wiki/Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl?version=24#Testing-the-configuration

http://www.redmine.org/boards/2/topics/24386?r=25722#message-25722
http://www.redmine.org/boards/2/topics/24386?r=24411#message-24411
http://www.redmine.org/issues/7410
http://redmine.rubyforge.org/svn/trunk/extra/svn/Redmine.pm
http://code.google.com/p/redminerepositorycontrol/
http://www.redmine.org/issues/5236
http://www.webdotdev.com/nvd/content/view/209/
http://dev.mysql.com/doc//refman/5.5/en/encryption-functions.html
http://www.redmine.org/boards/2/topics/6387
http://www.linuxquestions.org/questions/linux-server-73/apache-2-2-authtype-digest-pam-module-mysql-configuration-and-guidance-needed-789958/

10. 重要的插件:
https://github.com/ciaranj/redmine_burndown
http://www.redminebacklogs.net/en/installation.html#
https://github.com/backlogs/redmine_backlogs

11. 还有几个库会在安装插件的时候用到,因为时间原因,以上资料用来升级Redmine是足够了,插件因为时间关系暂时是没好。

libxslt

cucumber-rails, gherkin

12.

Redmine 显示“Updated by {{author}} {{age}} ago”的问题

升级了一下的服务器,终于不再用PC代替了。Redmine也升了个级,目前的版本是1.0.5。不过出现了点小问题,原来好用的最近的新闻里出现的是
Updated by {{author}} {{age}} ago

History list shows “Updated by {{author}} {{age}} ago”,提示i18n只支持到0.4.2,而系统里是0.6.0,把高版本删除了就好了。

倚天出笼记

持利器,事半而功倍。所以IT界以发明各种轮子为主要乐事。若器成则功利倍,没有人可以拒绝。在开始打造我们开发的目标团队之时,虽然还是孤身一人,但对各种使用利器之法也是有所耳闻。那段时间赋闲在家,研究一些好玩的技术,算是为某些事做准备,也可以调整自己的心态,积累精神。

一、高可用的管理平台
版本管理什么的以前都比较习惯了。从CVSSVN一路走来,就是在一个人编码的时候也在使用SVN。管理方面还对比过TracRedmine。虽然一直对Python的好感多于Ruby,但是经过比较之后还是觉得Redmine更好一些。就这样,其实在加入新公司之前,各种管理工具通过选择就已经确定了以redmine/Subversion为基础。这两种工具的结合有很多优点:
* Redmine的权限管理可以于Subversion集成。
* Subversion提交的内容与Redmine的问题可以有效地连接。
* Redmine还可以提供简单的BUG管理功能。
从某种意义上来说,我是“拒绝文档控”。一直以来想鼓吹的就是没有文档的软件开发、没有说明书的软件操作方式。但是计划还是要有的,对进度的控制也要在合理的范围内。Redmine正好提供了详细的管理能力。除了可以对项目提供计划和实施管理之外,它的问题条目还可以详细或者粗略地提供开发时间的一些细节。如果可以,使用它也可以生成项目的开发或者设计文档。

二、高可用的硬件
而且那段时间一直使用Ubuntu做为Desktop,两个显示器使用起来,调代码、测试输出效率非常高。以致于当时大致每天下午可以有一两个小时出去骑会自行车散心。所以团队组建初期就提了硬件的指标,这个配置现在看来水平也不算低。每台开发用的电脑都是4核心CPU/8G内存,显示器的概算是每个人都是双显。后来因为我们还要与其他部门一块办公,大致的双显比例是1/2强。原来的开发机都是台式机,在项目逐渐增多后后续的配置都是移动性较强的笔记本了。
我在与之前一些朋友的探讨过程中,他们不是十分理解为什么配置这么好。最多的质疑是这好的配置要多花钱,但是这个说法非常经不起推敲,以一台电脑三年的预算使用期来算,就算是花费6,000元来配置一台开发用机,一年的成本也只有2000,平均到每个月只有非常少的费用。而采用好工具对开发人员带来的,恐怕用这些钱是换不来的。比如:
* 心情的舒畅
* 工作效率的提高
* 对工作条件的满意程度
没经历过用烂机器开发过程的人永远也不能懂得执行编译似卡死的时候的那种感觉,特别是项目Deadline临近。

三、敏捷的开发框架
使用敏捷框架是必然会在突发的、时间有限的项目中被采用的。特别是新团队,原始积累不够丰富的团队。
我们常用的这两个CodeIgniter/Play框架基本上都是沿着这个思路来的。
选择CI是为了将来在虚拟主机上使用。选择Play则是由于客户要求使用Java。不过我们用absiege的测试结果PHP的还要好一些。

四、模板,一定要有的模板
对于我们来说模板程序员和美工最好的沟通工具。我们的美工甚至已经可以在程序员参与之前,就可以根据需要打造好用户的界面。以至于有个项目的甲方说这个系统你们是不是设计得太简单了?这么快就做好了?
模板系统在为我们以原型驱动的开发过程打造了一个良好的基础,客户可以更好的理解我们的想法,并给我们最真实的意见反馈。
CodeIgniter里采用Smarty模板、Play里采用了自带的Grails模板,虽然还有可以同时用于Java和PHP,甚至当我们使用了Python/Ruby都可以用得上的Mustache模板系统,但是指望一个模板系统在不同的语言下都完全保持一致是不可能的。特别是Play里那些@之类。

五、Flash,IE Killer
如果愿意享受,软件开发的乐趣非常多。但是注意有很多烦恼。我们目前最大的烦恼来自于IE6。当初我们在给客户展示图表的时候,一开始使用了HighCharts,一个基于JavaScript的图表系统,在展示单个图表的时候问题不大,但是多图表展示一度让我们怀疑系统出现了致命的问题。应该说在这个问题上Flash成为了我们开发时IE6的Killer。

六、有效的工具
有效的工具我们用过的真是很多,下面几个是常用的但不限于:
* Httpfox(Web调试)
* Notepad++(HTML开发的利器)
* Piwik(用来分析客户行为)
* Netbeans
* Eclipse

我们还在打造基于node.js和d3.js的图表系统。工具的便利,让我们开发时的倚天剑日趋成熟。
利器在手,快乐我有。

Code Review for Redmine

相关文件要复制到指定目录

/usr/share/redmine/vendor/plugins/redmine_code_review$ sudo cp -R assets/ /var/www/pm/plugin_assets/redmine_code_review/

在系统管理里设置角色和权限中相关角色的权限。

翻译的内容需要放到
/usr/share/redmine/config/locales/zh.yml 文件中。在研究是否可以放到独立文件中。

http://www.r-labs.org/projects/r-labs/wiki/Code_Review

redmine生产环境500错误解决方法

每次遇到wordpress出现500错误的时候都心情抑郁。这种直接导致没有心情继续发日志。生活点滴无法记录的感觉很差。
下午的时候发现让人更为头疼的问题,redmine出现了500错误。

An error occurred on the page you were trying to access.
If you continue to experience problems please contact your redMine administrator for assistance.

对于这种只显示一行英文字的错误,提供的有用信息基本上没有。而对于Linux来说,最好的办法就是查log。
1. Redmine的系统管理员要看这里:
/var/log/redmine/default/production.log
比如我这次发生的错误是:

Parameters: {"action"=>"index", "controller"=>"welcome"}

ActiveRecord::StatementInvalid (Mysql::Error: Got error 28 from storage engine: SHOW FIELDS FROM `setting
s`):
  /usr/lib/ruby/1.8/active_record/connection_adapters/abstract_adapter.rb:219:in `log'

2. 在mysql里测试:
show fields from `settings`;
果然出现ERROR 1030 (HY000): Got error 28 from storage engine

3. 检查磁盘空间:

$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
...                      96118540  91236092         0 100% /

4. 清理足够的空间,问题解决。

参考:
1. Got error 28 from storage engine
2. redMine 500 error
3.

我自己的相关文章:Redmine on Ubuntu

Ubuntu下Subversion集成Redmine用户认证

事实上,没有什么事比这件更让人上火。在此之前,一切如此顺利,apt-get和少有的几个小修改就可以解决,而且Google之后可以得来的资料非常丰富。这一件呢?搜索出来的结果居然会导致配置错误。

话说要完成集成认证,首先要安装这个模块libapache2-mod-auth-mysql,因为我安装的Redmine后台使用的是mysql,如果postgresql或sqlite,那就自行找相关的模块吧。

sudo apt-get install libapache2-auth-mysql

创建视图:

CREATE VIEW users_auth_external AS
SELECT u.login AS username,
       u.hashed_password AS passwd,
       GROUP_CONCAT(p.identifier) AS groups
FROM `members` m
INNER JOIN users u ON m.user_id = u.id
INNER JOIN projects p ON m.project_id = p.id
WHERE u.status = 1
GROUP BY username

配置:

下面列出了两种配置方式,新版本是我在Ubuntu 10.10下缺省使用apt-get安装后可用的版本,但是搜索一般得来的结果以第一种居多(最恶的是在这个模块sourceforge的主站上得到的居然是老版本的内容):

# 老版本 新版本
# AuthMySQLEnable On

AuthMySQLHost 192.168.xxx.xxx

AuthMySQLUser redmine

AuthMySQLPassword redmine_password

AuthMySQLDB redmine087

AuthMySQLUserTable “users, members” #注意这儿跟上不一样

AuthMySQLNameField login

AuthMySQLPasswordField hashed_password

AuthMySQLPwEncryption sha1

AuthMySQL On

AuthMySQL_Authoritative on

AuthMySQL_Host localhost

AuthMySQL_DB my_database

AuthMySQL_User my_database_user

AuthMySQL_Password my_database_password

AuthMySQL_Password_Table users_auth_external

AuthMySQL_Group_Table users_auth_external

AuthMySQL_Username_Field username

AuthMySQL_Password_Field passwd

AuthMySQL_Group_Field groups

AuthMySQL_Encryption_Types SHA1Sum

经常搞不懂这种修改有什么意义。因为看起来就是改变了名字而已。也许是开发人员的习惯或者本尊更换以致于见不得不同风格的内容,但是这种变化给人带来的不便却是显而易见的。即便是开源软件,即便是施福于人的东西,这种变更也让人心生不满。虽然渐近不惑,惑日渐多。不过也容易明白,有时候自己也会做错事。或许不惑之说无外乎警醒我们年华已逝,剩下的时间多干点正事儿吧,又或许是说你想怎么干就怎么干,爽才是真正的不惑吧。

参照:

1. 使用Apache为subversion做出认证
2. Authenticate Apache against Redmine with AuthMySQL
3. libapache2-auth-mysql主站