Redmine_Backlogs在“设置”页面显示迁移成功失败



所以,我试图让redmine_backlogs与SQL服务器一起工作。[我们使用的是SQL Server而不是SQLite,以更好地扩展]我不是一个Ruby程序员,但我真的想为我的团队这个插件,因为我们积极使用Redmine的几个项目。

在阅读了一些Ruby教程之后,我已经设法做了一些修改,并正确地安装和迁移了插件[它看起来]。

在Redmine的插件设置界面[管理中],它显示迁移不成功。尽管所有的列表项都是绿色的,并且迁移似乎有效。什么好主意吗?

我所做的更改是绕过Active records处理直接SQL查询的方式的可疑问题。

这是我做的改动-

错误#1 -

C:ProjectsRedmineredmine-2.3.2>rake redmine:plugins:migrate
Migrating redmine_backlogs (Redmine Backlogs)...
==  AddStoryPositions: migrating ==============================================
-- execute("select max(position) from issues")
   -> 0.0020s
   -> -1 rows
rake aborted!
An error has occurred, this and all later migrations canceled:
undefined method `each' for -1:FixnumC:/Projects/Redmine/redmine-2.3.2/plugins/redmine_backlogs/db/migrate/026_add_story_positions.rb:10:in `up'

FIX #1 -

直接查询不能正常工作与sqladapter [TinyTds + Active Record]026年_add_story_positions.rb

class AddStoryPositions < ActiveRecord::Migration
  def self.up
    # Rails doesn't support temp tables, mysql doesn't support update
    # from same-table subselect
    unless RbStory.trackers.size == 0
      max = 0
          dbconfig = YAML.load_file(File.join(File.dirname(__FILE__), '../../../../config/database.yml'))#[Rails.env]['username']
        if dbconfig[Rails.env]['adapter'] == 'sqlserver' then
            database = dbconfig[Rails.env]['database']
            dataserver = dbconfig[Rails.env]['dataserver']
            mode = dbconfig[Rails.env]['mode']
            port = dbconfig[Rails.env]['port']
            username = dbconfig[Rails.env]['username']
            password = dbconfig[Rails.env]['password']
            client = TinyTds::Client.new(
                :database => database,
                :dataserver => dataserver,
                :mode => mode,
                :port => port,
                :username => username,
                :password => password)
            client.execute("select max(position) from issues").each{|row| max = row[0]}
            client.execute "update issues
               set position = #{max} + id
               where position is null and tracker_id in (#{RbStory.trackers(:type=>:string)})"
        else
            execute("select max(position) from issues").each{|row| max = row[0]}
            execute "update issues
               set position = #{max} + id
               where position is null and tracker_id in (#{RbStory.trackers(:type=>:string)})"
        end
    end
  end
  def self.down
    puts "Reverting irreversible migration"
  end
end
错误# 2

rake流产!发生了一个错误,这次和以后所有的迁移都取消了:

TinyTds::Error: ALTER TABLE ALTER COLUMN position失败,因为一个或多个对象访问了该列。: ALTER TABLE [issues] ALTER COLUMN [position]/Projects/Redmine/Redmine -2.3.2/plugins/redmine_backlogs/db/migrate/033_unique_positions. int NOT NULLC:rb: 30:"起来"

修复# 2

033 _unique_positions.rb

    #SQLServer cannot change the type of an indexes column, so it must be dropped first
   remove_index :issues, :position
    change_column :issues, :position, :integer, :null => false
    add_index :issues, :position
错误# 3

rake流产!未定义的方法each' for -1:Fixnum C:/Projects/Redmine/redmine-2.3.2/plugins/redmine_backlogs/lib/backlogs_setup.rb:155:in迁移?'

修复# 3

def migrated?
    available = Dir[File.join(File.dirname(__FILE__), '../db/migrate/*.rb')].collect{|m| Integer(File.basename(m).split('_')[0].gsub(/^0+/, ''))}.sort
    return true if available.size == 0
    available = available[-1]
    ran = []
    dbconfig = YAML.load_file(File.join(File.dirname(__FILE__), '../../../config/database.yml'))#[Rails.env]['username']
    if dbconfig[Rails.env]['adapter'] == 'sqlserver' then
      database = dbconfig[Rails.env]['database']
      dataserver = dbconfig[Rails.env]['dataserver']
      mode = dbconfig[Rails.env]['mode']
      port = dbconfig[Rails.env]['port']
      username = dbconfig[Rails.env]['username']
      password = dbconfig[Rails.env]['password']
      client = TinyTds::Client.new(
        :database => database,
        :dataserver => dataserver,
        :mode => mode,
        :port => port,
        :username => username,
        :password => password)
      client.execute("select version from schema_migrations where version like '%-redmine_backlogs'").each{|m|
        ran << Integer((m.is_a?(Hash) ? m.values : m)[0].split('-')[0])
      }
    else
      Setting.connection.execute("select version from schema_migrations where version like '%-redmine_backlogs'").each{|m|
        ran << Integer((m.is_a?(Hash) ? m.values : m)[0].split('-')[0])
      }
    end
    return false if ran.size == 0
    ran = ran.sort[-1]
    return ran >= available
  end
  module_function :migrated?    

我使用了错误的where子句-这是正确的,我一定是在调试时重写了。"% -redmine_backlogs"

我以前不能回答我自己的问题,但现在我可以了。上面的代码经过测试并运行正常。从那以后,我一直在Windows上使用MS SQL成功地运行积压任务。

最新更新