我在我的生产服务器上运行了一个应用程序,它使用pggem与Postgres数据库进行通信.Postgres正在默认端口上运行,并且位于防火墙后面 - 所以除了以外的任何东西都无法访问它localhost.我没有配置Postgres做任何与SSL相关的事情.
我正在通过SSL访问Rails应用程序,并且证书已经签署了另一个域,因此第一次点击它时,会出现证书错误...但这是SSL相关的唯一奇怪的事情.
然而,我在我的Rails日志中间歇性地看到这一点(当浏览器发生时伴随着500错误):
Started GET "/admin/pages" for <xxx.xxx.xxx.xxx> at 2012-02-02 01:52:03 -0500
Processing by PagesController#index as HTML
Completed 500 Internal Server Error in 4ms
ActiveRecord::StatementInvalid (PGError: SSL error: decryption failed or bad
record mac
: SELECT "pages".* FROM "pages" ):
app/controllers/pages_controller.rb:36:in `index'
Run Code Online (Sandbox Code Playgroud)
我勒个去?
好吧,这正在融化我的大脑.这可能与我不理解Upstart以及我应该理解的事实有关.提前抱歉,这个问题很长.
我正在尝试使用Upstart来管理Rails应用程序的Unicorn主进程.这是我目前的/etc/init/app.conf:
description "app"
start on runlevel [2]
stop on runlevel [016]
console owner
# expect daemon
script
APP_ROOT=/home/deploy/app
PATH=/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:$PATH
$APP_ROOT/bin/unicorn -c $APP_ROOT/config/unicorn.rb -E production # >> /tmp/upstart.log 2>&1
end script
# respawn
Run Code Online (Sandbox Code Playgroud)
这很好 - 独角兽开始很棒.不太好的是,检测到的PID不是独角兽大师,而是一个sh过程.这本身并不是那么糟糕 - 如果我没有使用自动化的Unicorn零停机时间部署策略.因为我发送-USR2给我的独角兽大师后不久,一个新的主人产生了,旧的主人死了......这个sh过程也是如此.所以Upstart认为我的工作已经死了,如果我愿意,我不能再用它重新启动restart或停止它stop.
我玩过配置文件,试图将-D添加到Unicorn线(如下$APP_ROOT/bin/unicorn -c $APP_ROOT/config/unicorn.rb -E production -D:)以守护Unicorn,我添加了这expect daemon条线,但这也没有用.我也试过expect fork了.所有这些事情的各种组合都可能导致start和stop挂起,然后Upstart对工作状态感到困惑.然后我必须重新启动机器来修复它.
我认为Upstart在检测何时/如果Unicorn正在分叉时遇到问题,因为我ruby-local-exec在我的$APP_ROOT/bin/unicorn脚本中使用了rbenv + shebang .这里是:
#!/usr/bin/env ruby-local-exec
#
# …Run Code Online (Sandbox Code Playgroud) 我试着注册了NSWorkspaceDidWakeNotification与[NSNotificationCenter defaultCenter],但是当我的MacBook Pro从睡眠状态唤醒它永远不会触发.我注册了火灾的其他通知,所以这不是我如何注册它的问题.
基本上我需要在用户的机器从睡眠中唤醒,并且用户已经重新登录,或者机器已经唤醒并且用户回到他们的帐户中时,如果没有向他们显示登录屏幕,则需要得到通知.如果我必须处理多个通知,那也没关系.
有什么想法吗?
谢谢!
科迪