环境
Redmine version:3.X
Ruby version : 1.9.3
MySql version : 5.5.43
需要注意的是使用的ruby是1.9以上,所以必须为mysql2
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: my_password
邮箱配置方法:(要注意缩进)
email_delivery:
delivery_method: :smtp
smtp_settings:
enable_starttls_auto: false
address: 'mail.**.**.**'
port: 25
domain: 'mail.**.**.**' # 'your.domain.com' for GoogleApps
authentication: :login
user_name: 'xuqi'
password: '******'
备忘:
查看当前进程ID:
cat tmp/pids/server.pid
后台启动redmine:
nohup bundle exec rails server -b 172.26.14.92 webrick -e production &
使用Rest API 批量生成Task
需求:从Excel读取所有的task信息,并使用这些信息生成Task。
关键代码:
class CreateRedmine():
def __init__(self, redmineExportXls):
self.RMDataXls = redmineExportXls
self.RMDataList = []
self.LoadRMDataOK = False
self.redmine = Redmine('http://172.26.14.92:3000/', key='1cb880c401e940a589768f96a6ba6528bda87959')
self.project = 'XXXX'
#data load
self.loadRedmineData()
pass
def loadRedmineData(self):
try:
XlsFile = xlsRWLib(self.RMDataXls)
XlsFile.openReadExcel()
strSheetName = excelFormatDef.RM_DATA_SHEET_NAME
taskid = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_TASK_ID, 1 )
taskfollow = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_TASK_FOLLOW, 1 )
taskName = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_TASK, 1 )
endSchedule = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_FINISH_DAILY, 1 )
startDate = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_START_DAILY, 1 )
taskProgress = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_PROGRESS, 1 )
taskTimer = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_TIMER, 1 )
taskComment = XlsFile.getColVal(strSheetName, excelFormatDef.RM_COL_COMMENT, 1 )
self.LoadRMDataOK = True
except:
self.LoadRMDataOK = False
print('>>>>>ERROR: open %s excel file failed,please input the address is ok?!' % (self.RMDataXls))
return
for i in range(0, len(taskName)):
task= {'taskName':taskName[i],'endSchedule':endSchedule[i],'taskProgress':taskProgress[i],'taskTimer':taskTimer[i],'taskComment':taskComment[i],'taskid':taskid[i],'taskFollow':taskfollow[i],'startDate':startDate[i]}
if task['taskName'].find('MM') > 0:
self.RMDataList += [task]
startIndex = task['taskName'].find('MM')
endIndex = task['taskName'].find(' ')
screenid = str(task['taskName'][startIndex:endIndex])
taskname = task['taskName'][0:startIndex-1]
if excelFormatDef.SCREEN.has_key(screenid):
self.createRedmineIssue(task,screenid,taskname)
pass
def createRedmineIssue(self,task,screen,taskname):
print screen
issue = self.redmine.issue.new()
issue.project_id = self.project
issue.subject = task['taskName']
issue.tracker_id = 5
issue.description = ''
issue.status_id = 3
issue.done_ratio = task['taskProgress']
issue.assigned_to_id = excelFormatDef.SCREEN[screen]
issue.watcher_user_ids = self.getWatcher(excelFormatDef.SCREEN[screen])
issue.custom_fields = [{'id': 1, 'value': task['taskid']},{'id': 2, 'value': screen},{'id': 3, 'value': taskname}]
issue.due_date = datetime.datetime.strptime(str(task['endSchedule']), "%Y-%m-%d").date() - 7
issue.start_date = datetime.datetime.strptime(str(task['startDate']), "%Y-%m-%d").date() -7
issue.save()
pass
def getWatcher(self,user):
watcher = []
if user == excelFormatDef.USER_CC:
watcher = [excelFormatDef.USER_SGX]
elif user == excelFormatDef.USER_CP:
watcher = [excelFormatDef.USER_WL]
else:
pass
watcher += [excelFormatDef.USER_XQ]
return watcher
def reportSchedule(self):
# check data load success?
if not self.LoadRMDataOK:
print '#####>>>>>>>##### Have Error! RUN STOP!!!!!!'
return
pass