当通过vagrant部署到VM并由varnish配置并作为deamon运行时,sinatra app在生产模式中停止

时间:2015-07-07 15:35:28

标签: ruby sinatra vagrant chef sinatra-assetpack

我有一个sinatra应用程序,当我在生产中运行它时它会起作用。

第一个请求有效,资产下载和页面加载。 如果刷新页面,请求就会停止,并且没有任何内容记录到日志文件中。

我正在使用sinatra-asset-pack运行,并且我在启动之前预先编译了资产。

我发布了代码,但我不确定解决问题需要什么

编辑:它在我自己的盒子上工作正常,但是当我使用vagrant将它部署到VM时,它只是在生产模式下停止,但它在开发模式下很好。

编辑:我能够让它吐出这个错误:

errno的:: EPIPE 破管@ io_write -

然后将其缩小到一个动作,但是在动作中发布代码是没有意义的,因为它没有记录任何内容并且动作的第一行 是一个记录动作所以我是不确定动作是否完全运行;在遇到问题之后添加了日志记录,所以不管它是什么,我认为不是那样的。

编辑:错误实际发生在这里(sinatra的base.rb(1144):

1142 def dump_errors!(boom)
1143  msg = ["#{Time.now.strftime("%Y-%m-%d %H:%M:%S")} - #{boom.class} - #{boom.message}:", *boom.backtrace].join("\n\t")
1144  @env['rack.errors'].puts(msg)
1145 end

编辑:好的,所以当我手动运行部署命令时,它工作正常;很奇怪,服务器的输出仍然输出到终端,尽管它是分叉的,我想知道这是不是问题。破损的管道是不再存在的终端(当通过厨师部署时),因此它正在破坏......也许?

1 个答案:

答案 0 :(得分:0)

好的,事实证明破碎的管子是原因,由于某种原因,即使在分叉之后,它也试图将stdout和stderr写入终端。 然而,因为终端不再存在(它由厨师启动)它不能再写入输出并因此被锁定,在VM上手动启动应用程序允许它工作,并且进一步证明这一结论是添加重定向({ {1}})在start命令的末尾允许应用程序工作。

为什么sinatra仍在将日志写入终端而不是我不知道的文件,我需要解决这个问题,但问题的主要问题已经解决了。

编辑:

最后我只是这样做:

>> app.log 2>&1

将它重定向到与我的日志相同的位置,所以它现在应该没问题......我想?