2017-06-09 2 views
0

Je suis en train de mettre à jour une installation de Redmine de la version 3.0.3 à 3.3.3. Le processus que je suis toujours pour cela est d'installer une nouvelle Redmine sur une nouvelle machine, importer et sqldump de l'actuelle, puis copier les choses importantes (files/config.yml/database.yml, plugins) et exécuter toutes les étapes nécessaires. Cela a généralement bien fonctionné dans le passé.Colonne inconnue 'tokens.update_on' lors de l'importation de mysql dump vers la nouvelle instance de Redmine

Pour le moment, après l'importation de la commande sqldump, Redmine ne démarre pas et j'obtiens une erreur que je n'arrive pas à comprendre.

L'importation mysql semble fonctionner:

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

Alors je les étapes habituelles qui fonctionnent tous sans erreur:

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 

Quand je navigue à myredmine.com que je reçois le « interne Message d'erreur. Vérifiez les journaux et sur mettre est:

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' 

C'est le code de la ligne 425 de ce fichier:

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

qui se trouve dans cette section:

# 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 

Je trouve habituellement la sortie d'erreur pour ceux-ci soit relativement explicite mais je ne sais pas comment interpréter celle-ci.

J'ai supprimé tous les plugins pour m'assurer qu'il ne s'agit pas d'un problème de compatibilité et que j'obtiens toujours le même problème. La version actuelle de Redmine est la version 3.0.3, exécutée sur Ruby 1.9.3-p551, Rails 4.2.1 et AWS Linux AMI 2010.03 (dont il est conseillé de s'éloigner).

Le nouveau Redmine est 3.3.3, en cours d'exécution sur Ruby 2.2.5-P319, Rails 4.2.7.1 et CentOS 7.

Toute aide grandement appréciée.

+0

Quel est le code sur la ligne 425? partager la méthode dans le contrôleur d'application –

+0

quelle est la portée? –

+0

Mis à jour à nouveau pour inclure la portée. – shaneoh

Répondre

1

Comme il est indiqué dans les commentaires l'erreur est

ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'tokens.updated_on'

Il n'y a pas colonne appelée updated_on dans Token modèle et que vous essayez de le mettre à jour ligne 425

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

Vous devez ajouter migration pour cette colonne.

run commande suivante dans le terminal à partir du dossier racine de l'application,

rails g migration AddUpdatedOnToToken updated_on:datetime 

rake db:migrate 
+0

Merci - savez-vous comment je peux le faire? Je ne suis pas très expérimenté avec les bases de données en général et MySQL en particulier. – shaneoh

+0

vérifier la réponse mise à jour –

+0

Lorsque je lance cette première commande, j'obtiens l'erreur '' '/home/centos/.rvm/gems/ruby-2.2.5/gems/mysql2-0.3.21/lib/mysql2/client .rb: 70: dans 'connect ': Accès refusé pour l'utilisateur' root '@' localhost '(utilisant le mot de passe: NO) (Mysql2 :: Error)' '' et pourtant quand je l'ai essayé avec sudo je reçois 'commande non trouvée '. – shaneoh

0

La réponse a été d'ajouter manuellement la colonne nécessaire. La manière décrite dans la première réponse n'a pas fonctionné - comme je l'ai noté j'ai continué à obtenir la permission refusée. C'est bizarre car il n'y a que deux utilisateurs mysql et tous les deux ont accès à cette base de données.

Ainsi, la manière de résoudre ce problème est de se connecter à mysql en tant qu'utilisateur Redmine et exécuter ces commandes:

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

Et le problème a été résolu - j'ai pu continuer et Redmine d'accès sans problème.