【发布时间】: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: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。但是,它仍然无法在运行 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