小编Ale*_*scu的帖子

尽管有足够的可用内存,但Postgres会出现内存错误

我有一台运行Postgres 9.1.15的服务器.服务器有2GB的RAM,没有交换.Postgres会间歇性地开始在某些SELECT上出现"内存不足"错误,并且会继续这样做,直到我重新启动Postgres 连接到它的某些客户端.奇怪的是,当发生这种情况时,free仍会报告超过500MB的可用内存.

select version();:

PostgreSQL 9.1.15 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
Run Code Online (Sandbox Code Playgroud)

uname -a:

Linux db 3.2.0-23-virtual #36-Ubuntu SMP Tue Apr 10 22:29:03 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

Postgresql.conf(其他一切都被注释掉/默认):

max_connections = 100
shared_buffers = 500MB
work_mem = 2000kB
maintenance_work_mem = 128MB
wal_buffers = 16MB
checkpoint_segments = 32
checkpoint_completion_target = 0.9
random_page_cost = 2.0
effective_cache_size = 1000MB
default_statistics_target = 100
log_temp_files = 0
Run Code Online (Sandbox Code Playgroud)

我从pgtune获得了这些值(我选择了"混合类型的应用程序"),并根据我所阅读的内容摆弄它们,但没有取得太多真正的进展.目前有68个连接,这是一个典型的数字(我还没有使用pgbouncer或任何其他连接的连接器).

/etc/sysctl.conf:

kernel.shmmax=1050451968
kernel.shmall=256458

vm.overcommit_ratio=100 …
Run Code Online (Sandbox Code Playgroud)

memory postgresql

12
推荐指数
1
解决办法
9706
查看次数

无法使用Ruby连接到Heroku上的PostgreSQL数据库 - 无法翻译主机名

我正在使用Ruby(而不是Rails)并连接PostgreSQL数据库.我一直试图在Heroku上设置,但是我在启动应用程序时遇到了问题.在本地运行应用程序正常.

我的本地.env看起来像:

postgres://DATABASE_URL=localhost
Run Code Online (Sandbox Code Playgroud)

并且连接到数据库的Ruby连接如下所示:

@@db = PGconn.open(:hostaddr => ENV['DATABASE_URL'], :dbname => '(dbname)', :password => '(password)')
Run Code Online (Sandbox Code Playgroud)

当我推送到Heroku时,应用程序在该行崩溃,并将此错误写入日志:

could not translate host name "postgres://(my heroku db address)" to address: Name or service not known (PG::Error)
Run Code Online (Sandbox Code Playgroud)

那里的数据库地址与DATABASE_URL我的匹配heroku:config.我正在使用共享数据库.

我尝试使用:host => ENV['DATABASE_URL'](而不是:hostaddr),但结果相同.我猜我有一些简单的东西,但是我没有任何好的想法.

ruby postgresql heroku pg

7
推荐指数
2
解决办法
4864
查看次数

Basecamp如何在Gmail上添加"在Basecamp上查看"链接?

我刚从Basecamp收到一封电子邮件,其中包含一个"我在Basecamp上查看"的链接,我可以从我的Gmail收件箱中点击该链接.

在此输入图像描述

他们是怎么做到的?我查看了Gmail中的原始邮件,但我看不到包含相应链接的任何标题 - 它只显示在实际的邮件内容中.这是Gmail/Basecamp特定的合作伙伴关系,还是我通过我的应用程序发送电子邮件时可以做的事情?

gmail basecamp

7
推荐指数
1
解决办法
527
查看次数

Spreadsheet gem:无法创建空工作簿

我正在使用https://github.com/zdavatz/spreadsheet版本0.8.3

我有代码迭代一个集合,并在每个项目的同一工作簿中创建一个工作表.当集合为空时,执行的代码最终看起来像:

io = StringIO.new
book = Spreadsheet::Workbook.new
book.write(io)
Run Code Online (Sandbox Code Playgroud)

最后一行提出:

TypeError: can't convert nil into Integer
    spreadsheet/excel/writer/workbook.rb:636:in `pack'
    spreadsheet/excel/writer/workbook.rb:636:in `write_window1'
    spreadsheet/excel/writer/workbook.rb:419:in `write_from_scratch'
    spreadsheet/excel/writer/workbook.rb:644:in `write_workbook'
    spreadsheet/writer.rb:12:in `write'
    spreadsheet/workbook.rb:124:in `write'
Run Code Online (Sandbox Code Playgroud)

将我的代码更改为此修复了一些事情:

io = StringIO.new
book = Spreadsheet::Workbook.new
book.create_worksheet if book.worksheets.empty?
book.write(io)
Run Code Online (Sandbox Code Playgroud)

但我宁愿不必将电话包括在内create_worksheet.我的问题是:

a)我的代码中有什么问题吗?

b)这是宝石中的一个错误还是预期崩溃?

ruby spreadsheet

5
推荐指数
1
解决办法
480
查看次数

Rails:执行在time_zone_select上过期

以下异常间歇性地出现:

An ActionView::Template::Error occurred

execution expired
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
Run Code Online (Sandbox Code Playgroud)

这是完整的痕迹:

vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `block in require'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:236:in `load_dependency'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require'
vendor/bundle/ruby/1.9.1/gems/tzinfo-0.3.37/lib/tzinfo/timezone.rb:103:in `get'
vendor/bundle/ruby/1.9.1/gems/tzinfo-0.3.37/lib/tzinfo/timezone_proxy.rb:80:in `real_timezone'
vendor/bundle/ruby/1.9.1/gems/tzinfo-0.3.37/lib/tzinfo/timezone_proxy.rb:52:in `period_for_utc'
vendor/bundle/ruby/1.9.1/gems/tzinfo-0.3.37/lib/tzinfo/timezone.rb:458:in `current_period'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/core_ext/object/try.rb:36:in `try'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/values/time_zone.rb:212:in `utc_offset'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/values/time_zone.rb:226:in `<=>'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/values/time_zone.rb:334:in `sort'
vendor/bundle/ruby/1.9.1/gems/activesupport-3.2.13/lib/active_support/values/time_zone.rb:334:in `all'
vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_view/helpers/form_options_helper.rb:507:in `time_zone_options_for_select'
vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_view/helpers/form_options_helper.rb:612:in `to_time_zone_select_tag'
vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_view/helpers/form_options_helper.rb:277:in `time_zone_select'
vendor/bundle/ruby/1.9.1/gems/actionpack-3.2.13/lib/action_view/helpers/form_options_helper.rb:654:in `time_zone_select'
Run Code Online (Sandbox Code Playgroud)

当我导航到相关页面时,它加载正常.它似乎对大多数人来说很好,并且只是间歇地(很少)像这样崩溃.我注意到,只要它发生,用户代理就是机器人; 最近的是Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html).但是我担心它有一天会发生在人类身上,所以我想知道是否有人知道我能做些什么呢?

更新

今天就出现了,用户已登录(幸运的是,该用户是我......虽然无法复制它).

execution expired
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/visitor.rb:15:in `visit'
Run Code Online (Sandbox Code Playgroud)

跟踪:

vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/visitor.rb:15:in `visit'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/visitor.rb:5:in `accept'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/emitter.rb:36:in `block in visit_Psych_Nodes_Sequence'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/emitter.rb:36:in `each'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/emitter.rb:36:in `visit_Psych_Nodes_Sequence'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/visitor.rb:15:in `visit'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/visitor.rb:5:in `accept'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/emitter.rb:26:in `block in visit_Psych_Nodes_Document'
vendor/bundle/ruby/1.9.1/gems/psych-1.3.4/lib/psych/visitors/emitter.rb:26:in …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionview activesupport

5
推荐指数
1
解决办法
871
查看次数

Rails - 在同一请求上处理多个不同的时区

我希望在Rails应用程序中的同一视图中为多个时区显示数据,以用于时间和考勤系统.一点背景:

  • 我们制作电子时钟.人们,但他们在他们的业务.工作人员上班和下班,并记录他们的工作时间.
  • 时钟将某人作为unix时间输入/输出到我们的API的时间推迟(例如,我们的Javascript时钟实现如下所示及时抓取时钟:) moment().unix().然后,API将其作为一个存储在Postgres数据库中timestamp without time zone.
  • 当用户登录到站点时,around_filter会根据此用户组织的设置为请求设置适当的时区.

如果我们的组织跨越多个时区,则会出现此问题.例如,在每个澳大利亚首都城市设有办事处的企业将跨越三个时区(在夏令时期间更多).但是,中央办公室中将有一个人需要检查整个组织的数据 - 我们称之为我们的经理.

假设我们的经理位于悉尼,那是上午11点.他们管理着三个办公室 - 一个在悉尼,一个在布里斯班(在DST期间落后悉尼一小时),另一个在阿德莱德(在DST期间落后悉尼半小时).工作人员在当地时间上午9点在三个办公室上班.因此,在经理的仪表板上,时钟输入的所有时间都应显示为上午9点.但是,当前的实现(使用around_filter)将分别显示上午9点,上午8点和上午8点30分的时间,因为它们将使用悉尼时区进行偏移.

对来自不同城市的员工应用了一层过滤,因此可以告诉系统A人来自悉尼,B人来自阿德莱德,C人来自布里斯班.问题 - 我想建议 - 是如何最好地让Rails尽可能有效地向不同时区显示偏移量.

奖金积分:以及显示时间,我们还需要阅读输入.例如,有人可能提前5分钟计时,他们的时间表需要更正.如果当地经理(即布里斯班的某个人)纠正布里斯班员工的时间表,那么这应该相对容易管理 - 鉴于我们知道他们在布里斯班,我们可以将请求的时区设置为布里斯班,让ActiveRecord执行抵消我们.但是如果总经理(总部设在悉尼但管理所有时区)想要进行更改,那么我们需要能够根据他们的时区将他们的输入正确地转换回UTC.关于如何最好地做到这一点的任何建议将是美好的.

问题的具体例子

在我的数据库中,我的clock_ins表如下所示:

user_id (integer) | time (timestamp without time zone)
------------------|-----------------------------------
1                 | "2012-09-25 22:00:00.0"
2                 | "2012-09-25 22:30:00.0"
3                 | "2012-09-25 23:00:00.0"
Run Code Online (Sandbox Code Playgroud)

我的用户表看起来像这样:

user_id (integer) | time_zone (varchar)
------------------|-----------------------------------
1                 | "Sydney"
2                 | "Adelaide"
3                 | "Brisbane"
Run Code Online (Sandbox Code Playgroud)

(这是一种简化,实际上用户和他们的时区之间还有另一种联接)

如果我们将每个用户的时区应用到他们的时间,我们发现他们都在当地时间上午9点.即.2012-09-25 23:00:00.0UTC …

timezone activerecord ruby-on-rails

5
推荐指数
1
解决办法
912
查看次数

pg_dump收到SSL错误,似乎超时了

我正在尝试使用下载数据库到我的本地计算机pg_dump.我正在使用的命令是:

pg_dump --host xx.xx.xx.xx --port xxxx --username "xxx" --password  --format custom --blobs --verbose --file "testing.db" "xxx"
Run Code Online (Sandbox Code Playgroud)

当它转储数据库中的最后一个表时,它总是崩溃并出现此错误:

pg_dump: Dumping the contents of table "versions" failed: PQgetCopyData() failed.
pg_dump: Error message from server: SSL error: sslv3 alert handshake failure
pg_dump: The command was: COPY public.xxx (columns) TO stdout;
Run Code Online (Sandbox Code Playgroud)

我通过SSH连接到一个服务器,它更接近我正在下载的服务器(我在布里斯班,它在旧金山)并且能够pg_dump毫无问题地完成.所以我知道数据库服务器很好.我怀疑这是暂停,因为它在失败之前到达最后一张桌子; 如果它实际上是一个SSL错误,我预计它会更早出现.也就是说,超时发生在每次失败后不同的时间(两次最近的测试分别在1300s和1812s之后失败).

欢迎提供有关如何调试的任何提示.

我在OS X 10.8.5上.本地pg_dump是9.2.4,服务器是运行psql 9.1.9的Ubuntu Server.

postgresql ssl pg-dump

4
推荐指数
1
解决办法
2368
查看次数