【问题标题】:Ruby on Rails command rake db:migrate not working using PostgreSQLRuby on Rails 命令 rake db:migrate 不能使用 PostgreSQL
【发布时间】:2013-12-28 13:13:34
【问题描述】:

正如我在标题中提到的,我在 Ruby on Rails 上使用 PostgreSQL 数据库,因为 heroku 不再支持 MySQLite。在我运行命令rails generate scaffold User name:string email:string 之后,一切都很顺利,但是当我尝试rake db:migrate 时,它抛出了一些错误。搜索了一段时间后,我将 Rake 从 10.0.1 降级为 0.8.7。这是我使用 --trace 得到的错误:

> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32:
> Use RbConfig instead of obsolete and deprecated Config. (in
> /home/Roma/rails_projects/coise)
> ** Invoke db:migrate (first_time)
> ** Invoke environment (first_time)
> ** Execute environment
> ** Execute db:migrate rake aborted! could not connect to server: Connection refused
>         Is the server running on host "localhost" (127.0.0.1) and accepting
>         TCP/IP connections on port 5432? /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:928:in `initialize'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:928:in `new'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:928:in `connect'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:228:in `initialize'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:25:in
> `new'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:25:in
> `postgresql_connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:230:in
> `new_connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:238:in
> `checkout_new_connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:194:in
> `block (2 levels) in checkout'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in
> `loop'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in
> `block in checkout' /usr/lib/ruby/1.9.1/monitor.rb:211:in
> `mon_synchronize'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:189:in
> `checkout'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:96:in
> `connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:318:in
> `retrieve_connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:97:in `retrieve_connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/connection_specification.rb:89:in `connection'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/migration.rb:486:in
> `initialize'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/migration.rb:433:in
> `new'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/migration.rb:433:in
> `up'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/migration.rb:415:in
> `migrate'
> /usr/lib/ruby/gems/1.9.1/gems/activerecord-3.0.1/lib/active_record/railties/databases.rake:142:in
> `block (2 levels) in <top (required)>'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:636:in `call'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:636:in `block in
> execute' /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:631:in
> `each' /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:631:in
> `execute' /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:597:in
> `block in invoke_with_call_chain'
> /usr/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:590:in
> `invoke_with_call_chain'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2051:in
> `invoke_task'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2029:in `block (2
> levels) in top_level'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2029:in `block in
> top_level'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2068:in
> `standard_exception_handling'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2023:in
> `top_level'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2001:in `block in
> run' /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2068:in
> `standard_exception_handling'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
> /usr/lib/ruby/gems/1.9.1/gems/rake-0.8.7/bin/rake:31:in `<top
> (required)>' /usr/bin/rake:23:in `load' /usr/bin/rake:23:in `<main>'

我真的不知道现在该做什么。我还将展示我的 database.yml 文件(根据我在搜索时遇到的提示进行了一些更改):

development:
  adapter: postgresql
  encoding: unicode
  database: coise_development
  pool: 5
  username: coise
  password:
  host: localhost
  port: 5432

test:
  adapter: postgresql
  encoding: unicode
  database: coise_test
  pool: 5
  username: coise
  password:
  host: localhost
  port: 5432

production:
  adapter: postgresql
  encoding: unicode
  database: coise_production
  pool: 5
  username: coise
  password:

【问题讨论】:

  • 您的 posgresql 服务器是否正在运行?在 linux 中,您可以使用命令 sudo service postgresql start 启动它
  • 我的机器是Windows 7,但我运行的是Cygwin,我会试试的。
  • 如我所想。服务在 Cygwin 上不起作用。我确定我使用 Cygwin 安装了 PostGreSQL,我只是不知道如何运行它的命令...

标签: ruby-on-rails ruby postgresql heroku rake


【解决方案1】:

我已经取得了进步。通过这篇 StackOverflow 帖子 - Enable Postgresql in Cygwin - 我能够启动并运行我的 PostGreSql 服务。最后,我所要做的就是根据启动 PostGreSql 服务的用户更改我的 database.yml 文件用户名和数据库字段,在我的例子中是“Roma”。

最后,命令rake db:migrate 没有遇到任何问题,就像我推送到heroku 所做的一样,完美无缺。我唯一不明白的地方在于 heroku 主机,因为我的用户页面(我使用 Rails scaffold 命令添加的表)尚不可用。我的 heroku 告诉我应该有更多的“Dynos”并升级到“生产 Postgresql 数据库”。我不确定这是否意味着托管需要一段时间才能完成,或者我的应用程序是否真的有任何问题,尽管我不得不说生成的数据库非常基本和简单。如果任何版主认为这应该变成一个新的 StackOverflow 帖子,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 2011-12-03
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多