我目前在Amazon RDS上设置了PostgreSQL数据库。数据库连接到运行Rails应用程序的Elastic Beanstalk服务器,并且Rails应用程序正常工作(在生产站点上,我可以很好地修改数据库。我也可以通过SQL工作台查看数据库就好了,并且我可以看到我在生产站点上所做的更改反映在数据库中。
所以我知道数据库工作正常,我的弹性beanstalk服务器连接到它很好,我的Rails应用程序连接到它也很好。
但是,当我尝试通过我的EC2实例连接到数据库时(注意:此实例位于与我的EB和RDS实例(N. Virginia)不同的区域(俄亥俄州),我收到此错误:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
目录/var/run/postgresql
存在,但该文件不存在。我尝试从root搜索该文件,结果证明它在任何地方都不存在。
这是一个问题,因为我需要能够远程播种数据库,并且尝试从控制台运行rake db:seed
会产生此错误。当我在生产中运行rails控制台时,也会出现错误,并尝试查看属于数据库的任何内容。
这是我的config/database.yml
文件:
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
test:
<<: *default
database: db/test.sqlite3
production:
<<: *default
adapter: postgresql
encoding: unicode
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
这是EB在部署时知道连接到PG数据库的方式。
我曾尝试编辑RDS的安全规则,以接受来自EC2的公共IP的PostgreSQL连接,但这似乎不起作用。
任何人都可以帮我吗?
编辑:
好的,我可以使用psql
命令连接到远程数据库,其中选项指定服务器就好了。我通过执行一个简单的查询来测试它,我肯定建立了连接。我现在不确定如何告诉服务器自动连接它。
答案 0 :(得分:1)
您的应用程序似乎正在尝试连接到localhost上的PostgreSQL;看起来你的config/database.yml
文件是正确的,因为它正在寻找环境变量RDS_HOSTNAME
- 所以我最好的猜测是你没有设置它并且它默认为你的localhost,因为它是空的
您需要设置此环境变量以及其中所述的其他项目(数据库,用户,通行证和端口),以使其正常工作。
This StackOverflow answer解释了如何为Elastic Beanstalk设置环境变量。
答案 1 :(得分:0)
我通过
访问我的EB实例解决了这个问题 eb ssh
然后转到位于
的app目录 var/app/current
并正在运行
rails db:seed
使用seeds.rb