1

第一次尝试将我的 Rails 应用程序部署到 Heroku,我遇到了很多问题。该应用程序崩溃了,您可以查看图像中的日志:http: //i.stack.imgur.com/bsx1b.png

更糟糕的是,当我尝试在本地查看我的应用程序时,它无法在 postgreSQL 环境中运行.当我回到 database.yml 中使用 sqLite3 时,它工作得很好。我认为问题可能是除了添加 pg gem 和运行 bundle install 之外,我实际上还必须安装 postgreSQL。

我继续使用一键式安装程序(Windows 7 64 位)安装 PostgreSQL。重启后,一个简单的 rails server 或 bundle install 命令开始失败,所以我重新安装了整个 ruby​​ & rails。

现在 rails server 命令工作正常,当我尝试在本地环境中查看我的应用程序时,它会提示不同的错误。所以现在我有 pgAdmin III 和 Rails

PG::Error

fe_sendauth: no password supplied

我试图按照这个,但我找不到“pg_hba.conf”。我猜答案是基于不同的操作系统。

现在又一次,捆绑器不工作,给我错误......

问题: 1)我是否正确使用一键式安装程序安装 postgreSQL?因为这导致我的 ROR 以某种方式“崩溃”,我不得不完全重新安装导轨。2)我想我要删除所有与postgreSQL相关的东西,重新安装Rails,一切从头开始。我必须采取哪些步骤?我看过的所有参考资料似乎都不适合 Windows 环境。

在我的 gemfile 中,我有

gem 'pg'
gem 'thin'

在我的数据库中,我有

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
development:
  adapter: postgresql
  encoding: utf8
  database: mangfeel_development
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: postgresql
  encoding: utf8
  database: mangfeel_test
  pool: 5
  timeout: 5000

production:
  adapter: postgresql
  encoding: utf8
  database: mangfeel_production
  pool: 5
  timeout: 5000

安装 PostgreSQL 后,我现在遇到的错误:

c:\ruby\myapp>rails server
C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:926:in `report_activate_error': Could not find RubyGem railties (>= 0) (Gem::LoadError)
    from C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:244:in `activate_dep'
    from C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:236:in `activate'
    from C:/Program Files (x86)/ruby-1.9.2/lib/ruby/site_ruby/1.9.1/rubygems.rb:1307:in `gem'
    from C:/RailsInstaller/Ruby1.9.3/bin/rails:18:in `<main>'

当我运行捆绑安装时:

Gem::InstallError: The 'json' native gem requires installed build tools

Please update your PATH to include build tools or download the DevKit
from 'http://rubyinstaller.org/downloads' and follow the instructions
at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'
An error occurred while installing json (1.7.5), and Bundler cannot continue.
Make sure that `gem install json -v '1.7.5'` succeeds before bundling.

所以我将完全删除 pgAdminIII、PostgreSQL、Ruby on Rails,然后从头开始。

我认为部署不会那么难,但是从 SQLite3 迁移到 PostgreSQL 比我想象的要花费更多的时间和精力。我真的很感激这个问题的一些帮助。

-------------------------------------------------- -------------------------------------------------- --------------------

更新:重新安装一切后,我从头开始重新设置。

我检查了我的 SQLite3 版本应用程序运行良好。所以我开始设置 postgreSQL。首次设置 postgreSQL 时出现以下错误。通过设置,我的意思是编辑 config/database.yml 并安装 gem 'pg' 并删除 gem 'sqlite3'。当我尝试连接到 localhost:3000 时,出现以下错误:

ActiveRecord::ConnectionNotEstablished

经过一番研究,我发现设置数据库可能有更多步骤。所以我运行了 bundle 命令,

bundle exec rake db:setup

但是然后在控制台中,当我运行bundle exec rake db:setup时出现以下错误。

Couldn't create database for {"adapter"=>"postgresql", "host"=>"localhost", "encoding"=>"utf8", "database"=>"db/myapp_test", "pool"=>5, "timeout"=>5000}
rake aborted!
could not connect to server: Connection refused (0x0000274D/10061)
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused (0x0000274D/10061)
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
c:/ruby/myapp/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:schema:load => environment

当我尝试连接到 localhost:3000 时,我再次收到上述错误,而不是ActiveRecord::ConnectionNotEstablished

问题:我做错了什么,我该如何解决这个问题?

4

3 回答 3

5

如果您有错误:

PG::Error

fe_sendauth: no password supplied

您有个好消息,您的应用程序现在可以使用 PostgreSQL 数据库。(但你需要配置一些东西)

安装 PostgreSQL 后,您可以通过以下命令使用 PostgreSQL 创建新的 rails 应用程序:

rails new my_app -d postgresql

database.yml将被创建:

development:
  adapter: postgresql
  encoding: unicode
  database: my_app_development
  pool: 5
  username: my_app
  password:

test:
  adapter: postgresql
  encoding: unicode
  database: my_app_test
  pool: 5
  username: my_app
  password:

production:
  adapter: postgresql
  encoding: unicode
  database: my_app_production
  pool: 5
  username: my_app
  password:

你看,三个数据库都有usernamepassword字段,这是 Postgresql 中的帐户用户,database.yaml文件中的三个数据库将由该用户创建。所以你需要提供usernamepassword。默认安装 Postgresql 后,它创建了一个用户名是postgresql,密码是postgresql。你可以使用它。

如果要使用其他用户,只需pgAdmin III右键单击打开并创建新用户,然后Login Roles选择New login role使用密码创建新用户。然后将该用户名和密码放入database.yaml文件中。

之后,您现在需要的只是查找并打开pg_hba.conf文件,以使应用程序的某些配置可以与 PostgreSQL 一起使用。我很长时间没有使用 Windows,所以我不确定它在哪里,但你可以在安装 PostgreSQL 的文件夹中找到它。例如,如果您安装在E:\分区上,也许您可​​以在以下位置找到它:

E:\PostgreSQL\version\data

找到后,打开并找到一行:

# "local" is for Unix domain socket connections only
local all all ident sameuser

将其更改为:

# "local" is for Unix domain socket connections only
local all all md5

然后重新启动您的 Postgresql 数据库。要为应用程序创建数据库,请运行rake db:createrake db:create:all. 现在您的应用程序现在可以使用 PostgreSQL 数据库了,真高兴 :)。

于 2012-11-18T14:00:07.330 回答
0

我不是 Rails 专家,但这是我最近在 Heroku 上使用 POSTGRES 进行的部署的 YAML 文件之一

development:
adapter: postgresql
host: localhost
database: dbname_development

production:
adapter: postgresql
host: localhost
database: dbname_production

在 postgres 部署的情况下,您似乎缺少一个名为 host 的参数

于 2012-11-18T10:29:26.797 回答
0

在 Windows 上从 SQLite3 迁移到 PostgreSQL 的步骤,以将现有 Rails 应用程序部署到 Heroku:

  1. 在您的Gemfile中,找到gem 'sqlite3'并将其更改为gem 'pg'. 运行bundle install
  2. 从这里下载 Postgres 。选择一键式安装程序并选择您的操作系统环境(32 位或 64 位)。在安装过程中,不要选择安装它建议您安装的任何额外软件。它可能会弄乱您现有的 Rails,您将不得不重新安装 Rails。
  3. 现在转到config/database.yml,并将其更改为以下格式。当前是为 SQLite3 设置的,并且缺少 PostgreSQL 所需的一些字段。

    development:
       adapter: postgresql
       encoding: unicode
       database: my_app_development
       pool: 5
       username: my_app
       password:
    
    test:
       adapter: postgresql
       encoding: unicode
       database: my_app_test
       pool: 5
       username: my_app
       password:
    
    production:
       adapter: postgresql
       encoding: unicode
       database: my_app_production
       pool: 5
       username: my_app
       password:
    

适配器不同,有用户名和密码字段。默认的用户名和密码是 postgresql,但如果它不起作用(它对我不起作用),然后转到您的 pgAdmin,创建一个新的登录角色以创建另一个用户名/密码(检查选项使其成为超级用户)并使用它。

4、此时,您可以通过运行创建一个新的应用程序

rails new my_app -d postgresql

运行您的本地服务器,并尝试连接到 localhost:3000 以查看是否显示了欢迎页面。

5,如果一切正常,那么你需要做的就是创建一个新的 PostgreSQL 数据库,并将你现有的模型迁移到它。跑

rake db:create:all
rake db:migrate

完毕!现在检查您现有的应用程序是否在本地运行良好,并尝试将您的应用程序部署到 Heroku。

于 2012-11-19T00:22:54.963 回答