查看csv编码_Redmine Materials plugin 导入csv失败如何解决

申明:题图来源于Redmine Materials - Plugins - Redmine

说明:基于Redmine 3.4.8 redmine_materials 0.1.8/0.2.0,强烈建议在克隆的测试系统上尝试无误再修改正式业务系统。

Redmine,是一个较为大量使用的免费项目管理、Bug跟踪系统。使用起来较为简单,还可以AD/LDAP认证,以及跟代码版本库以及Testlink集成,扩展性较好。可以满足中小型企业的需求。

Redmine Materials plugin,是Redmine上一个比较有用的插件,用于项目中的物资管理,让Redmine从管人扩展到轻量级简单在管物管财(重度财物管理还是需要专业系统或收费插件)。官方介绍可以:用于设备、设备、书籍或其他物品的基本帐务管理。记录材料的使用或储存信息,而不是手工管理。

新项目使用过程中,新建物资,没有什么问题,导出也OK。但对于历史项目需要导入很多物资的情况,点击“导入物资”,发现导入结束,但是结果显示导入了0/4个物资,即代表未能导入成功。

2a92fa5c25999efb47e4e3df23e8694d.png

下面开始Debug过程:

1、第一招,查Cha水log表,找到redmine/log/production.log,可以发现导入错误信息:

su - redmine

vim redmine/log/production.log

Processing by MaterialImportsController#run as JS
  Parameters: {"project_id"=>"zl-prj-test", "id"=>"131c88c7c739**********2120a1c"}
  Current user: admin (id=1)
Completed 500 Internal Server Error in 12ms (ActiveRecord: 2.4ms)

ArgumentError (wrong number of arguments (given 2, expected 1)):
  plugins/redmine_materials/app/models/material_kernel_import.rb:14:in `build_object'
  app/models/import.rb:178:in `block in run'
  app/models/import.rb:117:in `block in read_items'
  app/models/import.rb:227:in `block in read_rows'
  app/models/import.rb:226:in `read_rows'
  app/models/import.rb:111:in `read_items'
  app/models/import.rb:169:in `run'
  plugins/redmine_materials/app/controllers/importer_material_controller.rb:83:in `run'
  lib/redmine/sudo_mode.rb:63:in `sudo_mode'

可以看到错误的意思是:导入时执行import.rb的178/117/227行时给build_object提供了两个参数,而material_kernel_import.rb的14行build_object只接受1个传入参数。

2、找相关源码查看:

vim redmine/plugins/redmine_materials/app/models/material_kernel_import.rb

找到第14行:

  def build_object(row)
    material = Material.new
...

然后我们先看看import.rb的178/117/227行:

vim redmine/app/models/import.rb

#178
       if object = build_object(row, item)
#117
      yield row, i if block_given?
#227
      yield row if block_given?

可以看到178行给build_pbject传入了两个参数row和item,而前面的build_object定义时仅接收row参数。

3、尝试解决:

估计是作者定义的时候和调用的时候思想开小差了,尝试修改build_object定义,方法是:照葫芦画瓢,照猫画虎,反正就是暴力修改试一下:

先备份:

cp redmine/plugins/redmine_materials/app/models/material_kernel_import.rb redmine/plugins/redmine_materials/app/models/material_kernel_import.rb.orig

然后修改:

vim redmine/plugins/redmine_materials/app/models/material_kernel_import.rb

修改前

  def build_object(row)
    material = Material.new
...

修改后:

  def build_object(row, item)
    material = Material.new
...

4、测试验证

首先,保险起见,执行一下重启服务的脚本(没有写脚本可以手动按顺序执行):

sh /opt/redmine/ReloadPlugins.sh

脚本如下:

#!/bin/bash

rvm 2.4.5@rails4.2

cd /opt/redmine/redmine
bundle install
bundle exec rake redmine:plugins:migrate RAILS_ENV=production
bundle exec pumactl --state tmp/pids/puma.state restart

然后,重新登录redmine,进行物资导入。

c4c8140f46fc9164f20b7ae277a82c76.png

这次导入结果是:4/4,即全部物资行都成功导入。

5、顺便提一下,导入过程中注意,如果导入的文字包含中文,两种方法:A、将csv用notepad打开另存为UTF-8编码格式,导入时选择编码:UTF-8;B、保持ANSI编码的csv,导入时编码选择:GB18030就可以了。物资csv导入字段映射如下图:

5ef4dfa898d1d9f836e065a34a6218b3.png

6、默认的Redmine主题(皮肤)比较复古,推荐几个好看的主题:Purplemine2、Minimalflat2、Redmine alex skin、A1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值