【问题标题】:rake db:migrate does nothing in Rails 4.1 app and exits without errorsrake db:migrate 在 Rails 4.1 应用程序中什么都不做,并且没有错误地退出
【发布时间】:2014-05-20 10:50:45
【问题描述】:

我正在设置一个全新的 Rails 4.1 应用程序并使用 64 位 PostgreSQL 9.3.4 作为我的开发服务器。在我运行rake db:migrate 之前,一切都很顺利。什么都没发生。我使用--trace 标志再次运行该命令,看起来该应用程序没有处理我的迁移并且没有错误地完成:

rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:migrate
** Invoke db:_dump (first_time)
** Execute db:_dump
** Invoke db:schema:dump (first_time)
** Invoke environment
** Invoke db:load_config
** Execute db:schema:dump

迁移是基本的东西,比如User 表。有些是由 Comfortable Mexican Sofa gem 自动生成的,有些是我自己从另一个 Rails 4 应用程序中提取的。

当我运行 rake db:migrate:status 时,它会将我的所有迁移显示为关闭/待处理:

 Status   Migration ID    Migration Name
--------------------------------------------------
  down    20120117051823  Create sessions table
  down    20120117051824  Create users
  down    20120117051910  Create categories
  down    20120117051947  Create statuses
  down    20120117052044  Create settings
  down    20120117052336  Create roles
  down    20120117053039  Create emails
  down    20120117053111  Create urls
  down    20120117053152  Create pictures
  down    20120117053441  Create addresses
  down    20120117053516  Create phones
  down    20120117053716  Create notes
  down    20120117053849  Create announcements
  down    20120117054118  Create contacts
  down    20120117060145  Users have and belong to many roles
  down    20121018184843  Create translations
  down    20140407233039  Create cms

我可以毫无问题地运行rake db:createrake db:drop,这证实我对PostgreSQL 服务器具有适当的访问权限。

我尝试使用 SQLite 代替 PostgreSQL,但我遇到了同样的问题:它创建 development.sqlitetest.sqlite 就好了,但没有填充它们。我消除了访问权限、可写文件/目录等内容。我什至尝试设置一个新的 PostgreSQL 服务器并遇到了同样的问题。此外,连接到同一台服务器的旧 Rails 3 和 Rails 4 应用程序运行良好。

我还尝试使用 RailsComposer 设置应用程序,以防我的模板出现问题,但我遇到了同样的问题。

根据 Stack Overflow 的一些回答,其他人在使用 Devise 和 CanCan 时也遇到了同样的问题,但我没有使用任何一个:我使用 Authlogic 作为我的身份验证系统,而 Pundit 作为我的授权系统。

什么可能导致这个问题?

更新

好的,如果我使用 Ruby 1.9.3 在 64 位 Windows 7 系统上运行我的代码,我的代码可以同时使用 PostgreSQL 和 SQLite。但是,它仍然无法在运行 64 位 Debian 7 和 Ruby 2.1.1 或 Ruby 2.0.0 的开发盒上运行。 (注意:我正在运行 rbenv。)

更新 2

rake db:schema:load 适用于 Windows 和我的 Debian 机器。只有rake db:migrate 不起作用。

【问题讨论】:

  • 你是否有一个流浪的 RAILS_ENV 设置?
  • @muistooshort - 不。我尝试在命令行中明确设置它 - 无济于事。此外,我多次重新启动系统,所以如果有一个胭脂 ENV 卡在内存中的某个地方,它就会消失 -:)
  • 您检查过您的schema_migrations 表是否有任何异常? schema.rb 怎么样?只是抛出一些疯狂的猜测。
  • 另一个疯狂的想法:某处可能有一些编码怪异吗? UTF-16 vs UTF-8 还是类似的?
  • 感谢您的猜测 :-) schema_migrations 看起来不错。当我在我的 Windows 7 机器上运行迁移时,它们运行良好,但在我的 Debian 7 机器上却不行。一切都是UTF-8。我这样做是为了避免编码噩梦。

标签: postgresql ruby-on-rails-4 rake rails-migrations dbmigrate


【解决方案1】:

只是为了后代结束这个问题:我认为问题出在虚拟机上。我结束使用 vagrant 切换到 Debian 7.6,问题就消失了。

具体来说,我认为必须将底层文件系统从 linux 客户机映射到 Windows 主机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2014-05-09
    相关资源
    最近更新 更多