Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在docker容器中执行‘`rake db:setup`的Rails5总是在第一个命令成功后断开与postgresql的连接,使用docker-compose

在docker容器中执行‘`rake db:setup`的Rails5总是在第一个命令成功后断开与postgresql的连接,使用docker-compose
EN

Stack Overflow用户
提问于 2019-01-29 13:37:49
回答 1查看 628关注 0票数 1

我有一个Rails5,docker-compose项目(Github link),它可以很好地处理多个容器。

我可以使用docker-compose exec app rails db:create创建数据库,并在localhost:3000上运行项目

问题是它总是在成功完成命令后出错:could not connect to server: No such file or directory

当我想要使用执行其他3个命令的db:setup时,这是一个问题。它完成第一个命令,然后出现错误,表示连接断开,无法执行剩下的两个命令。

是否有什么东西关闭了命令之间的连接?我如何进一步调试它呢?

Rails 5.2.1,pg 1.1.3 Gemfile

.env文件中定义RAILS_ENV。在这种情况下,它是:

代码语言:javascript
运行
AI代码解释
复制
root@3ec00f6534aa:/app# printenv|grep RAILS
RAILS_ENV=development

以下是执行docker-compose exec app bash后应用程序容器中的错误输出。请注意第二行,说明数据库已创建:

代码语言:javascript
运行
AI代码解释
复制
root@b281e881b96a:/app# rake db:setup
Created database 'sc_dev'
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"?
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>10, "database"=>"smartcitizen_testing"}
rake aborted!
PG::ConnectionBad: 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"?
/usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `initialize'
/usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `new'
/usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `connect'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:684:in `connect'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:215:in `initialize'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `new'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:40:in `postgresql_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:809:in `new_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:853:in `checkout_new_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:832:in `try_to_checkout_new_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:793:in `acquire_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:521:in `checkout'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:380:in `connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:1008:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/connection_handling.rb:90:in `connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/postgresql_database_tasks.rb:12:in `connection'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/postgresql_database_tasks.rb:21:in `create'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:119:in `create'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:139:in `block in create_current'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:316:in `block in each_current_configuration'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:313:in `each'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:313:in `each_current_configuration'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/tasks/database_tasks.rb:138:in `create_current'
/usr/local/bundle/gems/activerecord-5.2.1/lib/active_record/railties/databases.rake:29:in `block (2 levels) in <main>'
/usr/local/bundle/gems/rake-12.3.1/exe/rake:27:in `<top (required)>'
Tasks: TOP => db:setup => db:schema:load_if_ruby => db:create
(See full trace by running task with --trace)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 13:48:58

您正在运行rails db:create,但未指定环境。因此,Rails试图为您节省一些精力,并同时为开发和测试环境运行该命令(我记不清它们的运行顺序了)。您看到创建了sc_dev db,但是错误声明它无法为smartcitizen_testing数据库创建数据库。

Rails可以连接到开发数据库,但不能连接到测试数据库。

经过一些来回的评论,我了解到您使用的是DATABASE_URL环境变量,这是有问题的,因为测试和开发数据库实际上并不共享相同的数据库url。解决方案是修改database.yml,以便可以通过环境变量独立配置开发和测试数据库,从而允许在运行单个rails db:create命令时每个数据库都有自己的设置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54422361

复制
相关文章
Discourse 修改上传附件的大小
官方的帖子在:Change the maximum attachment/upload size - sysadmin - Discourse Meta 页面中。
HoneyMoose
2023/06/14
2970
Discourse 修改上传附件的大小
织梦dede修改附件图片储存路径
在用织梦建站时,在运营网站一段时间后,会发现织梦默认的图片上传路径有问题,织梦默认保存图片附件是按照日期来建目录,路径为uploads/allimg/171008/ ,网站每天都上传图片,时间长了uploads/allimg就有太多的目录了
用户8851537
2021/07/20
3.3K0
Emlog文章列表获取附件(图片)数量方法
本方法实际获取的是文章附件的数量,而非只是图片的数量,如果你的文章含有文件附件,列表也会显示成图片数量。所以此方法最适合于文章图片特别多而且没有附件的博客。Emlog文章列表获取附件(图片)数量,方法过于简单,修改博客emlog模板文件步骤如下:
用户8099761
2023/05/10
4330
NetCMS修改之二:单击新闻附件,直接打开文件「建议收藏」
NetCMS系统的新闻附件,是通过down.aspx页面实现下载附件的。这样做的好处可能是可以隐藏附件的真实地址,但给用户使用会带来一个小麻烦:无法使用右键单击来实现将下载的文件另存为。
全栈程序员站长
2022/11/11
3660
abstract修改方法
抽象的方法是要让子类继承下去再定义它的。让抽象的概念得以设计。比如当一种面向对象设计遇到一种方法有多种设计的时候,能够在基类暂且不设计他,把设计的工作交给子类去完毕,但子类设计时。要么继续继承他超类的抽象概念,要么就把抽象的方法定义出来。
全栈程序员站长
2022/07/18
2540
Typecho上传附件失败最佳解决方法
2.继续下面的工作:找到usr/uploads这个文件夹,修改777权限,linux和Windows系统修改的方法不同,但网上都有很多介绍:Windows下网站目录777可读写权限设置方法 然后重启服务器,上传附件成功。
白衣少年
2022/12/26
1.3K0
Typecho上传附件失败最佳解决方法
爬虫课堂(十四)|URL的去重方法
所谓的URL去重,就是爬虫将重复抓取的URL去除,避免多次抓取同一网页。爬虫一般会将待抓取的URL放在一个队列中,从抓取后的网页中提取到新的URL,在他们被放入队列之前,首先要确定这些新的URL没有被
黄小怪
2018/05/21
2.1K0
梁老师小课堂|谈谈模板方法模式
众多设计模式中,我觉得模板方法模式是很好理解,也很值得深入研究的技巧。定义如下,在一个包含多个步骤的业务框架中,大部分步骤是固定不变,并且适用于多种业务场景,可变的步骤则留给子类独立实现,从而分离了稳定和变化。
公众号_松华说
2020/11/17
3900
梁老师小课堂|谈谈模板方法模式
远程字体修改方法
注释: 其中font-family: ‘xxx’; 中的 xxx 字体名称(可随意命名,需要与使用时的名字保持一直)
小狐狸说事
2022/11/17
9990
JbuilderX的修改方法
打开JBuilderX/bin/jbuilder.config文件,在 #TunethisVMtoprovideenoughheadroomtoworkonlarge #applications vmparam-Xms32m vmparam-Xmx256m 后面追加一行 vmparam-Dprimetime.editor.useVariableWidthFont=true 此方法方法,在不同的系统和机器上表现的结果可能会不尽相同,大家自己研究吧。 可以把%system%/document.andSettings/you_user 目录下的/.primetimeX和/.jbuilderX目录删掉,然后再启动JBuilderX试试,一般就正常了。这时,可以看到“Tools”—“Perferences”中“Edit”—“Display”的“Fontfamily”选项为“DialogInput”。无论中文显示还光标位置应该都没有问题了,而且即使系统格掉重装,也不会有影响,不需要再重新设置。
逍遥剑客
2019/02/20
4370
JbuilderX的修改方法
打开JBuilderX/bin/jbuilder.config文件,在 #TunethisVMtoprovideenoughheadroomtoworkonlarge #applications vmparam-Xms32m vmparam-Xmx256m 后面追加一行 vmparam-Dprimetime.editor.useVariableWidthFont=true 此方法方法,在不同的系统和机器上表现的结果可能会不尽相同,大家自己研究吧。 可以把%system%/document.andSettin
逍遥剑客
2018/05/21
4820
go上传附件
package main import ( "fmt" "html/template" "io" "log" "net/http" "os" ) //上传方法 func upload(w http.ResponseWriter, r *http.Request) { //这里是get请求 if r.Method == "GET" { t, _ := template.ParseFiles("upload.html") t.Execute(w, nil) } else if r.Method == "POST" { // 服务端调用r.ParseMultipartForm,把上传的文件存储在内存和临时文件中 32 << 20 是一个很大的值:33554432 r.ParseMultipartForm(32 << 20) //这里获取表单的uploadfile file, handler, err := r.FormFile("uploadfile") if err != nil { fmt.Println(err) return } defer file.Close() //这里打开文件buffer f, err := os.OpenFile("./upload/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } defer f.Close() //把文件cp到指定目录下。 io.Copy(f, file) fmt.Fprintf(w, "%v", handler.Header) fmt.Fprintf(w, "上传成功") } else { fmt.Println("error") } } func main() { http.HandleFunc("/upload", upload) err := http.ListenAndServe(":8081", nil) if err != nil { log.Fatal("ListenAndServe:", err) } } ------------------------------------------------------------ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>go 上传test</title> </head> <body> <form method="POST" action="/upload" enctype="multipart/form-data" > <input type="file" name="uploadfile" /> <input type="submit" value="上传"> </form> </body> </html>
公众号-利志分享
2022/04/25
1.2K0
小课堂|计算文件Checksum的几种方法
比如,我们到Apache网站上去下载用于操作Excel的依赖包 - Apache POI,就可以看到checksum:SHA-256, SHA-512,如下图所示:
孟君
2021/11/23
1.4K0
小课堂|计算文件Checksum的几种方法
emlog缩略图不同实现方法:正文-附件-随机图片
实现emlog列表也缩略图按先调用正文第一张图片,没有则调用附件图片,如果前两者都没有则调用随机图片代码
用户8099761
2023/05/10
2380
Linux修改主机名修改hostname的方法
Linux主机名即hostname,如何修改?可以临时修改主机名,但是Linux服务器重启后,主机名就失效了。还有一种方式可以永久修改主机名,Linux重启与否依然有效。两种方法都来说一说:
用户1685462
2021/08/27
27.1K1
Ubuntu修改主机名修改hostname的方法
Ubuntu主机名即hostname,如何修改?可以临时修改主机名,但是Linux服务器重启后,主机名就失效了。还有一种方式可以永久修改主机名,Linux重启与否依然有效。两种方法都来说一说:
用户8965210
2021/08/31
7.9K1
Nodejs课堂笔记—第一课:修改Webstorm的默认主题
    最近小半年一直在忙于研究Docker源码,也在写相关的分析文章。但受限于某些条件不能发布到网上,甚为郁闷。而最近几天,接到新的开发任务,需要使用nodejs。之前一直听说过nodejs,但从来没有真正使用过。     因此,在博客中就记录下学习过程,权当课堂笔记了。 OK,第一节课开始了。 正所谓:工欲善其事,必先利其器。因此在google上面搜索一番,发现nodejs开发人员都比较推崇Web-storm这个IDE。并且说这款IDE是"js 开发神器"。站在巨人们的肩膀上,可以少走不少弯路。因此我也
随机来个数
2018/04/16
7790
SAP BOM批量修改方法
BOM批量更改操作步骤分为:选择参考对象-定义选择标准-选择更改类型-定义更改数据-执行更改,查看日志。
用户5495712
2019/05/29
7.9K0
点击加载更多

相似问题

谷歌课堂API -用户ID可以修改吗?

130

谷歌课堂-入门

11

谷歌课堂API

22

谷歌课堂表单

11

谷歌课堂网站整合链接

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文