我正在设置一个全新的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:create
和rake db:drop
,这可以确认我对PostgreSQL服务器拥有适当的访问权限。
我尝试使用SQLite代替PostgreSQL,但我遇到了同样的问题:它创建了development.sqlite
和test.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
无效。
答案 0 :(得分:0)
为后人关闭这个问题:我认为问题出在虚拟机上。我结束了使用vagrant切换到Debian 7.6并且问题消失了。
具体来说,我认为必须如此将底层文件系统从linux guest虚拟机映射到Windows主机。