rake db:migrate在Rails 4.1应用程序中不执行任何操作,并且退出时没有错误

时间:2014-04-08 00:00:53

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

我正在设置一个全新的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表。有些是由舒适的墨西哥沙发宝石自动生成的,有些是我自己从另一个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。但是,它仍然不适用于运行带有Ruby 2.1.1或Ruby 2.0.0的64位Debian 7的开发盒。 (注意:我正在运行rbenv。)

更新2

rake db:schema:load适用于Windows和我的Debian计算机。只有rake db:migrate无效。

1 个答案:

答案 0 :(得分:0)

为后人关闭这个问题:我认为问题出在虚拟机上。我结束了使用vagrant切换到Debian 7.6并且问题消失了。

具体来说,我认为必须如此将底层文件系统从linux guest虚拟机映射到Windows主机。