Redmine db:找不到迁移方法

我正在尝试从redmine 1.0迁移到redmine 2.3,并在运行db:migrate时出现错误。

sudo rake db:migrate RAILS_ENV=production --trace (in /opt/redmine-2.3) /var/lib/gems/1.8/gems/rake-10.0.4/lib/rake/file_utils.rb:9: warning: already initialized constant RUBY /var/lib/gems/1.8/gems/rake-10.0.4/lib/rake/file_utils.rb:86: warning: already initialized constant LN_SUPPORTED ** Invoke db:migrate (first_time) ** Invoke environment (first_time) ** Execute environment ** Invoke db:load_config (first_time) ** Execute db:load_config ** Execute db:migrate == BuildProjectsTree: migrating ============================================== rake aborted! An error has occurred, all later migrations canceled: undefined method `inherit_members_changed?' for #<Project:0x7f82e2dad038> /var/lib/gems/1.8/gems/activemodel-3.2.13/lib/active_model/attribute_methods.rb:407:in `method_missing' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/attribute_methods.rb:149:in `method_missing' /opt/redmine-2.3/app/models/project.rb:85:in `_callback_after_748' /var/lib/gems/1.8/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:460:in `_run__1269722363__save__4__callbacks' /var/lib/gems/1.8/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `send' /var/lib/gems/1.8/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:405:in `__run_callback' /var/lib/gems/1.8/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:385:in `_run_save_callbacks' /var/lib/gems/1.8/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:81:in `send' /var/lib/gems/1.8/gems/activesupport-3.2.13/lib/active_support/callbacks.rb:81:in `run_callbacks' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/callbacks.rb:264:in `create_or_update' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/persistence.rb:104:in `save!' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/validations.rb:56:in `save!' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/attribute_methods/dirty.rb:33:in `save!' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/transactions.rb:264:in `save!' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/transactions.rb:313:in `with_transaction_returning_status' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/transactions.rb:208:in `transaction' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/transactions.rb:311:in `with_transaction_returning_status' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/transactions.rb:264:in `save!' /opt/redmine-2.3/lib/plugins/awesome_nested_set/lib/awesome_nested_set/awesome_nested_set.rb:185:in `rebuild!' /opt/redmine-2.3/lib/plugins/awesome_nested_set/lib/awesome_nested_set/awesome_nested_set.rb:192:in `call' /opt/redmine-2.3/lib/plugins/awesome_nested_set/lib/awesome_nested_set/awesome_nested_set.rb:192:in `rebuild!' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/relation/delegation.rb:6:in `each' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/relation/delegation.rb:6:in `__send__' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/relation/delegation.rb:6:in `each' /opt/redmine-2.3/lib/plugins/awesome_nested_set/lib/awesome_nested_set/awesome_nested_set.rb:189:in `rebuild!' /opt/redmine-2.3/app/models/project.rb:416:in `rebuild_tree!' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/transactions.rb:208:in `transaction' /opt/redmine-2.3/app/models/project.rb:414:in `rebuild_tree!' /opt/redmine-2.3/db/migrate/105_build_projects_tree.rb:3:in `up' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:370:in `up' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `send' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `migrate' /usr/lib/ruby/1.8/benchmark.rb:293:in `measure' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:410:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/connection_adapters/abstract/connection_pool.rb:129:in `with_connection' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:389:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:528:in `__send__' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:528:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:720:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:777:in `call' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:777:in `ddl_transaction' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:719:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:700:in `each' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:700:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:570:in `up' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/migration.rb:551:in `migrate' /var/lib/gems/1.8/gems/activerecord-3.2.13/lib/active_record/railties/databases.rake:193 /usr/lib/ruby/1.8/rake.rb:636:in `call' /usr/lib/ruby/1.8/rake.rb:636:in `execute' /usr/lib/ruby/1.8/rake.rb:631:in `each' /usr/lib/ruby/1.8/rake.rb:631:in `execute' /usr/lib/ruby/1.8/rake.rb:597:in `invoke_with_call_chain' /usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' /usr/lib/ruby/1.8/rake.rb:590:in `invoke_with_call_chain' /usr/lib/ruby/1.8/rake.rb:583:in `invoke' /usr/lib/ruby/1.8/rake.rb:2051:in `invoke_task' /usr/lib/ruby/1.8/rake.rb:2029:in `top_level' /usr/lib/ruby/1.8/rake.rb:2029:in `each' /usr/lib/ruby/1.8/rake.rb:2029:in `top_level' /usr/lib/ruby/1.8/rake.rb:2068:in `standard_exception_handling' /usr/lib/ruby/1.8/rake.rb:2023:in `top_level' /usr/lib/ruby/1.8/rake.rb:2001:in `run' /usr/lib/ruby/1.8/rake.rb:2068:in `standard_exception_handling' /usr/lib/ruby/1.8/rake.rb:1998:in `run' /usr/bin/rake:28 

问题似乎是project.inherit_members_changed? 不存在,但在project.rb的第85行调用

 after_save :update_inherited_members, :if => Proc.new {|project| project.inherit_members_changed?} 

有谁知道这个问题的根源是什么?

::更新::

我现在尝试升级到ruby1.9.3,并得到相同的错误。

 rake db:migrate RAILS_ENV=production == BuildProjectsTree: migrating ============================================== rake aborted! An error has occurred, all later migrations canceled: undefined method `inherit_members_changed?' for #<Project:0x00000004b36d80> 

这可能是一个耙版本问题?

我也运行了bundle安装,并安装了所有需要的gem。

你的Ruby太旧了。 Redmine会狡猾地告诉你,最新版本的Redmine使用Ruby 1.8.7,但是我失去了大约两个小时的这个谎言。 我有Redmine在CentOS 6.4上使用ruby 1.9.3p385。 尝试更新到该版本,你可能会运行你的耙子命令。 这样更新Ruby:

http://www.ruby-lang.org/en/downloads/ (检查第三方工具/ RVM部分)。

我试了上面的两个解决scheme,编辑数据库的选项是唯一的工作。 升级到Ruby 2.1并没有改变任何东西。 但是,我可以评论说,我不需要“drop index”命令,并且根据有多less失败的迁移,我有时需要删除成员angular色表。 最后,最可重复的解决scheme是在迁移期间不要手动编辑数据库,而是自己编辑迁移文件,以便在正确的位置删除inherit_members字段,并在正确的位置再次添加。 要编辑的两个文件是:

  • db/migrate/20130202090625_add_projects_inherit_members.rb
    • 在添加projects列之前remove_column :projects, :inherit_members需要添加行remove_column :projects, :inherit_members
  • db/migrate/105_build_projects_tree.rb
    • 需要在Project.rebuid_tree之前添加add_column :projects, :inherit_members, :boolean, :default => false, :null => false

完成这两个更改后,可以一次完成一个完整的升级过程,而无需打开一个mysql shell(当然除了初始创build数据库,用户和权限命令)。

我在CentOS 6.2上遇到了完全相同的错误,Ruby 1.9.3-p392试图从0.8.x升级到2.3.0。 Ruby和最新版本的gem。 我做到了

更改数据库。 你可能不需要放弃索引,因为升级了一半的状态。

 alter table projects add column inherit_members boolean default false;
更新项目集inherit_members = false;

 drop index changesets_repos_scmid;
 drop index index_attachments_on_author_id;
 drop index index_attachments_on_container_id_and_container_type;
 drop index index_attachments_on_created_on;
 drop index index_auth_sources_on_id_and_type;
 drop index index_boards_on_last_message_id;
 drop index index_changesets_on_committed_on;
 drop index index_changesets_on_repository_id;
 drop index index_changesets_on_user_id;
 drop index index_comments_on_author_id;
 drop index index_comments_on_commented_id_and_commented_type;
 drop index index_custom_fields_on_id_and_type;
 drop index index_custom_fields_projects_on_custom_field_id_and_project_id;
 drop index index_custom_fields_trackers_on_custom_field_id_and_tracker_id;
 drop index index_custom_values_on_custom_field_id;
 drop index index_documents_on_category_id;
 drop index index_documents_on_created_on;
 drop index index_issue_categories_on_assigned_to_id;
 drop index index_issue_relations_on_issue_from_id;
 drop index index_issue_relations_on_issue_from_id_and_issue_to_id;
 drop index index_issue_relations_on_issue_to_id;
 drop index index_issues_on_assigned_to_id;
 drop index index_issues_on_author_id;
 drop index index_issues_on_category_id;
 drop index index_issues_on_created_on;
 drop index index_issues_on_fixed_version_id;
 drop index index_issues_on_priority_id
 drop index index_issues_on_priority_id;
 drop index index_issues_on_status_id;
 drop index index_issues_on_tracker_id;
 drop index index_issue_statuses_on_is_closed;
 drop index index_issue_statuses_on_is_default;
 drop index index_issue_statuses_on_position;
 drop index index_journals_on_created_on;
 drop index index_journals_on_journalized_id;
 drop index index_journals_on_user_id;
 drop index index_members_on_project_id;
 drop index index_members_on_user_id;
 drop index index_members_on_user_id_and_project_id;
 drop index index_messages_on_author_id;
 drop index index_messages_on_created_on;
 drop index index_messages_on_last_reply_id;
 drop index index_news_on_author_id;
 drop index index_news_on_created_on;
 drop index index_queries_on_project_id;
 drop index index_queries_on_user_id;
 drop index index_repositories_on_project_id;
 drop index index_settings_on_name;
 drop index index_time_entries_on_activity_id;
 drop index index_time_entries_on_created_on;
 drop index index_time_entries_on_user_id;
 drop index index_tokens_on_user_id;
 drop index index_user_preferences_on_user_id;
 drop index index_users_on_auth_source_id;
 drop index index_users_on_id_and_type;
 drop index index_users_on_type;
 drop index index_watchers_on_user_id;
 drop index index_watchers_on_watchable_id_and_watchable_type;
删除索引index_wiki_contents_on_author_id;
删除索引index_wiki_content_versions_on_updated_on;
 drop index index_wiki_pages_on_parent_id;
 drop index index_wiki_pages_on_wiki_id;
 drop index index_wiki_redirects_on_wiki_id;
 drop index index_workflows_on_new_status_id;
 drop index index_workflows_on_old_status_id;
 drop index index_workflows_on_role_id;
 drop index projects_trackers_unique;
放弃索引tokens_value;
删除索引watchers_user_id_type;

 cd / usr / local / redmine
耙tmp:caching:清除
耙tmp:会议:明确
 rake generate_secret_token
 rake --trace db:migrate RAILS_ENV = production

那个在原来抱怨不存在的专栏上就会失败。
“错误:关系”项目“的列”inherit_members“已经存在”
删除列并再次迁移:

 alter table projects drop column inherit_members;

 cd / usr / local / redmine
 rake --trace db:migrate RAILS_ENV = production

完成没有错误。