将mysql转储导入新Redmine实例时,未知列'tokens.update_on'

问题描述 投票:0回答:2

我正在将Redmine的安装从3.0.3升级到3.3.3。

我一直遵循的过程是在新机器上安装一个新的Redmine,从当前的一个导入和sqldump,然后复制重要的东西(files / config.yml / database.yml,plugins)并运行所有必要的脚步。这在过去通常运作良好。

目前,在导入sqldump之后,Redmine没有启动,我收到一个我无法弄清楚的错误。

mysql导入似乎工作:

mysql -u 'user' -p'mypassword' redmine < /home/redmine20170608.sql

然后我执行通常的步骤,所有步骤都运行没有错误:

bundle exec rake redmine:plugins:migrate RAILS_ENV=production
bundle exec rake db:migrate RAILS_ENV=production
bundle exec rake tmp:sessions:clear
bundle exec rake tmp:cache:clear
sudo service httpd restart

当我导航到myredmine.com时,我收到“内部错误”消息。检查日志和输出是:

ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'tokens.updated_on' in 'field list': UPDATE `tokens` SET `tokens`.`updated_on` = '2017-06-09 07:10:56.515511' WHERE `tokens`.`user_id` = 1 AND `tokens`.`value` = '5a229e24fe73e8a43768c46af2275a8b4a60c9b3' AND `tokens`.`action` = 'session'):
  app/models/user.rb:425:in `verify_session_token'
  app/controllers/application_controller.rb:77:in `session_expired?'
  app/controllers/application_controller.rb:67:in `session_expiration'


Migrating to CreateRolesManagedRoles (20150528092912)
Started GET "/" for 72.155.92.149 at 2017-06-09 07:16:14 +0000
Processing by WelcomeController#index as HTML
Completed 500 Internal Server Error in 25ms (ActiveRecord: 1.8ms)

ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'tokens.updated_on' in 'field list': UPDATE `tokens` SET `tokens`.`updated_on` = '2017-06-09 07:16:14.896744' WHERE `tokens`.`user_id` = 1 AND `tokens`.`value` = '5a229e24fe73e8a43768c46af2275a8b4a60c9b3' AND `tokens`.`action` = 'session'):
  app/models/user.rb:425:in `verify_session_token'
  app/controllers/application_controller.rb:77:in `session_expired?'
  app/controllers/application_controller.rb:67:in `session_expiration'

这是该文件第425行的代码:

scope.update_all(:updated_on => Time.now) == 1

这部分内容如下:

  # Returns true if token is a valid session token for the user whose id is user_id
  def self.verify_session_token(user_id, token)
    return false if user_id.blank? || token.blank?

    scope = Token.where(:user_id => user_id, :value => token.to_s, :action => 'session')
    if Setting.session_lifetime?
      scope = scope.where("created_on > ?", Setting.session_lifetime.to_i.minutes.ago)
    end
    if Setting.session_timeout?
      scope = scope.where("updated_on > ?", Setting.session_timeout.to_i.minutes.ago)
    end
    scope.update_all(:updated_on => Time.now) == 1
  end

我经常发现这些错误输出相对自我解释但我不知道如何解释这个。

我删除了所有的插件,以确保它不是兼容性问题,仍然遇到同样的问题。

目前的Redmine是3.0.3,运行在Ruby 1.9.3-p551,Rails 4.2.1和AWS Linux AMI 2010.03(我建议远离它)。

新的Redmine是3.3.3,运行在Ruby 2.2.5-p319,Rails 4.2.7.1和CentOS 7上。

任何帮助非常感谢。

mysql ruby-on-rails ruby redmine
2个回答
1
投票

正如评论中所讨论的,错误是

ActiveRecord :: StatementInvalid(Mysql2 ::错误:未知列'tokens.updated_on'

updated_on模型中没有名为Token的列,您正在尝试在425行更新它

scope.update_all(:updated_on => Time.now) == 1

您需要为该列添加迁移。

从应用程序的根文件夹在终端中运行以下命令,

rails g migration AddUpdatedOnToToken updated_on:datetime

rake db:migrate

0
投票

答案是手动添加所需的列。第一个答案中描述的方式不起作用 - 如前所述,我一直被许可拒绝。这很奇怪,因为只有两个mysql用户,并且都可以访问该数据库。

所以解决这个问题的方法是以Redmine用户身份登录mysql并运行以下命令:

USE mydatabase;
ALTER TABLE tokens ADD updated_on VARCHAR(60);

问题得到了解决 - 我能够继续访问Redmine而没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.