【问题标题】:Rails Locally Installing Rails Application rake db:migrate returnsRails 本地安装 Rails 应用程序 rake db:migrate 返回
【发布时间】:2011-01-10 06:44:32
【问题描述】:

我有一个私人 Rails 应用程序,我正尝试在本地安装它。它目前在托管环境中运行,但我想在本地安装它以开始进行更改。我已经确定我可以对“实时”服务器进行部署更新,但最近的一次失误“加强了在本地进行更改的必要性”。

经过大量阅读后,我确定我需要...

  1. 获取最新的存储库(它使用 SVN)
  2. 抓取数据库mysqldump -u root --databases my_db_development > my_db_development_0110.sql
  3. 本地导入数据库(MAMP/Sequel Pro 注意到数据库中没有数据,尽管实时服务器中有数据- 这很奇怪吗?
  4. 验证database.yml(适配器:mysql,编码:utf8,数据库:my_db_development,用户名:root,密码:,主机:localhost)

我假设下一步是进入我的本地目录并 rake db:migrate --trace 返回以下输出。

我有点不确定如何去理解和确定我无法继续前进的原因。关于我是否遗漏了什么或可能需要改变什么的任何想法?

(in /Users/me/my_repo)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
Multiple migrations have the version number 1
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:472:in `migrations'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/connection_adapters/mysql_adapter.rb:15:in `inject'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:465:in `each'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:465:in `inject'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:465:in `migrations'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:431:in `migrate'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:373:in `up'
/Users/me/.gem/ruby/1.8/gems/activerecord-2.1.2/lib/active_record/migration.rb:356:in `migrate'
/Users/me/.gem/ruby/1.8/gems/rails-2.1.2/lib/tasks/databases.rake:99
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19

【问题讨论】:

    标签: ruby-on-rails rake localhost dbmigrate


    【解决方案1】:

    您的迁移目录中似乎有重复的迁移。检查 database_migrations/migrate 下的迁移前缀,并确保您没有复制多个版本或创建与存储库不同步的迁移。

    【讨论】:

    • db/migrate 显示 10 个迁移,其中两个的前缀为 001(001_completed 和 001_create_tokens)是否被视为重复?
    • 重要的是数字,而不是文件名后缀的名称,因此rails认为有重复。它必须是顺序的,否则迁移脚本无法确定首先运行哪个迁移。
    • 好的,有道理。那么重命名一个文件就这么简单吗?
    • 是的,很有可能。如果升级到 2.1 或更高版本,Rails 将使用时间戳而不是序列号,这样的冲突几乎不可能发生。
    • Dave/Ken - 感谢您的输入帮助。昨晚我对 Migrations 做了一些研究,对生成器以及前缀是如何创建的有了更好的了解。虽然我还没有对 db/migrate 文件进行任何更改,但今天早上我无法在本地启动 MySQL。删除我通过 Sequel Pro 创建的数据库并卸载 MAMP 后,我导入了相同的数据库并重新安装了 MAMP。然后我转到我的应用程序目录并输入“ruby script/server”。我不明白为什么,但“突然”该应用程序在 localhost:3000 上可见。感谢您的帮助...学到了很多东西!
    【解决方案2】:

    如果您从生产环境中导入整个数据库,则无需运行 db:migrate - 数据库/模式应该已经是最新的。听起来您的本地数据库中缺少数据,并且导入出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      相关资源
      最近更新 更多