部署 在 CentOS 服务器上运行 rake RAILS_ENV=production db:schema:load 时会将 rake 无限的执行下去

dxdxdx · 2012年01月25日 · 最后由 dxdxdx 回复于 2012年02月04日 · 6221 次阅读

CentOS 服务器是 5.7, rake 是 1.8 以上的版本,ruby-1.9.2

刚才在服务器上跑了一下 rake RAILS_ENV=production db:schema:load,迟迟看不到结果 ,用 ps aux | grep rake 查看了一下发现 rake 一个接一个地跑出来,紧接着服务器就死掉了。我是第一次部署 rails 程序,一直想不明白为什么 rake 会循环的执行下去? 我在本地运行 rake RAILS_ENV=production db:schema:load 是没有问题的。 哪位同学有没有遇到类似的问题?是怎么解决的? 谢谢! root 1201 0.0 0.0 63848 948 pts/0 S+ 14:23 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load root 1202 0.0 0.0 63848 948 pts/0 S+ 14:25 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load root 1203 0.0 0.0 63848 948 pts/0 S+ 14:23 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load root 1204 0.0 0.0 63848 948 pts/0 S+ 14:25 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load root 1205 0.0 0.0 63848 948 pts/0 S+ 14:23 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load root 1206 0.0 0.0 63848 948 pts/0 S+ 14:23 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load root 1207 0.0 0.0 63848 948 pts/0 S+ 14:24 0:00 bash /usr/local/rvm/bin/rake RAILS_ENV=production db:schema:load ......

从你给出的信息看,没有任何线索。你的 Rails 版本是多少?另外 db/schema.rb 是否存在?

rake db:schema:load     # Load a schema.rb file into the database

#1 楼 @lgn21st rails 的版本是 3.1.3,db/schema.rb这个文件存在,数据库用的是postgresql-9.1, 现在服务器已经 down 掉了,没法得到更多信息了 奇怪的是 rake 不会退出,而是不断地产生新的 rake 进程,都不知道怎么杀掉,然后就眼睁睁地看着服务器挂掉

#2 楼 @dxdxdx 贴以下你的 database.yml 我猜测可能是这里的问题。一下子想不出其他地方可能造成 rake db 的 loop 循环而且还不会抛出异常停止。

另外如果不用 rake db:schema:load,而是直接跑 rake db:migrate 呢?你的目的就是为了创建数据库并且创建好所有的 tables,试试看其他方法。

#3 楼 @lgn21st

development: adapter: postgresql encoding: unicode host: /tmp database: dx_development pool: 5 username: dx password: 123456

test: &test adapter: postgresql encoding: unicode host: /tmp database: dx_test pool: 5 username: dx password: 123456

production: adapter: postgresql encoding: unicode host: /tmp database: dx_production pool: 5 username: password:

cucumber: <<: *test

前面有跑过一次 rake db:migrate,结果导致了同样的结果,就是不断地有 rake 进程生成,然后服务挂掉

对,我只是为了创建数据库和表,看来是不能跑 rake 了,只是对这个问题有点纠结

#4 楼 @dxdxdx 我不明白你这里 host: /tmp 是干什么用的?rake task 的问题跟数据库无关,你检查一下环境依赖,包括 Gemfile 和 Gemfile.lock,然后测试下用 RAILS_ENV=production bundle exec rake db:migrate 的结果是不是还是一样?

#5 楼 @lgn21st 这个host: /tmp指定的是 postgresql socket 的目录,一般来说不需要配置这个目录,但是我安装 pg 这个 gem 无法识别 postgresql socket 的目录,所以就手工的配置好。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号