小编Dmy*_*iak的帖子

优化PostgreSQL以进行快速测试

我正在从SQLite切换到PostgreSQL,用于典型的Rails应用程序.

问题是PG的运行规格变得缓慢.
在SQLite上花了大约34秒,在PG上它是~76秒,这慢了2倍.

所以现在我想应用一些技术来使规范的性能与SQLite相提并论,而不需要修改代码(理想情况下只需设置连接选项,这可能是不可能的).

从头到尾有几件显而易见的事情是:

  • RAM磁盘(在OSX上使用RSpec进行良好设置会很好看)
  • 未记录的表(它可以应用于整个数据库,所以我没有更改所有脚本吗?)

你可能已经明白我不关心可靠性和其余的(DB在这里只是一次性的东西).
我需要充分利用PG并尽可能快地完成它.

理想情况下,最佳答案将描述这样做的技巧,设置和这些技巧的弊端.

更新: fsync = off + full_page_writes = off仅将时间减少到~65秒(〜-16秒).良好的开端,但远远没有34的目标.

更新2:尝试使用RAM磁盘,但性能增益在误差范围内.所以似乎不值得.

更新3:* 我找到了最大的瓶颈,现在我的规格和SQLite一样快.

问题是进行截断的数据库清理.显然SQLite在那里太快了.

为了"修复"它,我在每次测试之前打开一个事务并在结束时回滚它.

约700个测试的一些数字.

  • 截断:SQLite - 34s,PG - 76s.
  • 交易:SQLite - 17s,PG - 18s.

SQLite的速度提高了2倍.PG的速度提高4倍.

sql database postgresql performance database-tuning

196
推荐指数
2
解决办法
5万
查看次数

如何使用nginx proxy_pass保留请求URL

我试图使用Thin app服务器并遇到一个问题.

当nginx 代理使用proxy_pass http://my_app_upstream;应用程序对Thin(或Unicorn)的请求接收由nginx(http://my_app_upstream)发送的修改后的URL .

我想要的是从客户端传递原始URL和原始请求而不进行任何修改,因为应用程序非常依赖它.

nginx的" DOC说:

如果需要以未处理的形式传输URI,则应使用指令proxy_pass而不使用URI部分.

但我不明白如何配置,因为相关的示例实际上使用URI:

location  /some/path/ {
  proxy_pass   http://127.0.0.1;
}
Run Code Online (Sandbox Code Playgroud)

那么请你帮我弄清楚如何保留客户端的原始请求URL

ruby proxy nginx thin unicorn

69
推荐指数
5
解决办法
10万
查看次数

ActiveRecord Arel OR条件

如何使用逻辑OR而不是AND组合2个不同的条件?

注意:作为轨道范围生成2个条件,并且不能轻易地将其更改为where("x or y")直接类似的条件.

简单的例子:

admins = User.where(:kind => :admin)
authors = User.where(:kind => :author)
Run Code Online (Sandbox Code Playgroud)

它很容易应用和条件(对于这个特殊情况是没有意义的):

(admins.merge authors).to_sql
#=> select ... from ... where kind = 'admin' AND kind = 'author'
Run Code Online (Sandbox Code Playgroud)

但是,如何生成具有2种不同Arel关系的以下查询?

#=> select ... from ... where kind = 'admin' OR kind = 'author'
Run Code Online (Sandbox Code Playgroud)

似乎(根据Arel自述文件):

OR运算符尚不支持

但是我希望它不适用于此并期望写出如下内容:

(admins.or authors).to_sql
Run Code Online (Sandbox Code Playgroud)

ruby sql activerecord ruby-on-rails arel

58
推荐指数
4
解决办法
3万
查看次数

如何一次获取多个哈希值?

什么是更短的版本?:

from = hash.fetch(:from)
to = hash.fetch(:to)
name = hash.fetch(:name)
# etc
Run Code Online (Sandbox Code Playgroud)

请注意fetch,如果密钥不存在,我想引发错误.

必须有更短的版本,例如:

from, to, name = hash.fetch(:from, :to, :name) # <-- imaginary won't work
Run Code Online (Sandbox Code Playgroud)

如果需要,可以使用ActiveSupport.

ruby hash ruby-on-rails destructuring

51
推荐指数
3
解决办法
3万
查看次数

用于链接多行调用的Ruby约定

这有什么约定?

我使用下面的样式,但不确定它是首选的样式,因为如果我最后错过了一个点,我可能会遇到很多问题而没有意识到这一点.

query = reservations_scope.for_company(current_company).joins{property.development}.
  group{property.development.id}.
  group{property.development.name}.
  group{property.number}.
  group{created_at}.
  group{price}.
  group{reservation_path}.
  group{company_id}.
  group{user_id}.
  group{fee_paid_date}.
  group{contract_exchanged_date}.
  group{deposit_paid_date}.
  group{cancelled_date}.
  select_with_reserving_agent_name_for(current_company, [
                                       "developments.id as dev_id",
                                       "developments.name as dev_name",
                                       "properties.number as prop_number",
                                       "reservations.created_at",
                                       "reservations.price",
                                       "reservations.fee_paid_date",
                                       "reservations.contract_exchanged_date",
                                       "reservations.deposit_paid_date",
                                       "reservations.cancelled_date"
  ]).reorder("developments.name")
query.to_a # ....
Run Code Online (Sandbox Code Playgroud)

那么在多行链接方法的约定是什么?我更喜欢哪一种?

注意:我无法从Ruby编码风格指南中找到一个很好的例子.

ruby coding-style ruby-on-rails

42
推荐指数
4
解决办法
2万
查看次数

单选按钮生成重复的HTML id-s

在使用这样的代码(EditorTemplates/UserType.ascx)时,默认的ASP.NET MVC2 Html助手似乎会生成重复的HTML ID:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<UserType>" %>

<%: Html.RadioButton("", UserType.Primary, Model == UserType.Primary) %>
<%: Html.RadioButton("", UserType.Standard, Model == UserType.Standard) %>
<%: Html.RadioButton("", UserType.ReadOnly, Model == UserType.ReadOnly) %>
Run Code Online (Sandbox Code Playgroud)

它产生的HTML是:

<input checked="checked" id="UserType" name="UserType" type="radio" value="Primary" /> 
<input id="UserType" name="UserType" type="radio" value="Standard" /> 
<input id="UserType" name="UserType" type="radio" value="ReadOnly" /> 
Run Code Online (Sandbox Code Playgroud)

这清楚地表明了一个问题.所以我一定是在滥用助手等等.

我可以手动指定id为html属性,但我无法保证它将是唯一的.

所以问题是如何确保RadioButton助手生成的ID对于每个值都是唯一的,并且仍然保留用于生成这些ID 的约定(因此嵌套模型是否受到尊重?(最好不要手动生成ID.)

html asp.net-mvc html-helper radio-button asp.net-mvc-2

35
推荐指数
2
解决办法
1万
查看次数

漂亮的Ruby中的打印SQL

有没有一种简单的方法可以在(rails 3)控制台中打印随机SQL?

类似于awesome_print的东西,甚至可能是Pretty Print.

它不必理解所有可能的方言或超级先进.
我真正想要的是更容易检查ActiveRecord生成的SQL.

目前我只是将SQL复制到网上进行格式化,这显然是一种生产力杀手.

我真的很想query.to_sql.pretty_format_sql看到更好的输出.

谢谢.

ruby sql ruby-on-rails pretty-print

17
推荐指数
2
解决办法
4947
查看次数

jQuery可排序获取2个被交换的元素

我无法找到如何使用jQuery UI排序获取目标元素.

    $("#pages").sortable({
        opacity: 0.6,
        update: function(event, ui) {
            var first = ui.item; // First element to swap
            var second = ???? // Second element to swap
            swapOnServer(first, second);
        }
    });
Run Code Online (Sandbox Code Playgroud)

所有我试着点元素的选项被拖动,但不是被换用一个:ui.item[0],event.srcElement,event.toElement.

另外,this指向LIST(OL)元素.

第二个我的意思是:

原始订单是:

| 0 | 1 | 2 | 3 |

我们拖动元素1并将其放在位置3.最终将:

| 0 | 3 | 2 | 1 |

所以第一个元素是1,第二个元素是3(错误!见下文).

更新:我意识到我弄错了.在这种情况下的新订单将是.

| 0 | 2 | 3 | 1 |

结果我的问题真的没有意义.谢谢大家的帮助.我会标记投票并标记答案.

所以问题是如何在这里获得第二个元素?


当前的解决方法(因为没有关于可排序的交换的 …

javascript jquery jquery-ui jquery-ui-sortable

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

JavaScript中的Formtastic(表单构建器)

您是否了解任何与Formtastic类似但在浏览器中执行类似工作的表单构建器?

它不应该很重(所以不是ExtJS)并且理想地与Formtastic生成的结构兼容,基于jQuery和HAML-JS友好.

目的是使用SpineJS for Rails创建表单更容易.

更容易我的意思是:

  • 无需添加隐藏字段作为"未选中";
  • 不需要重复重复相同的结构;
  • 无需手动将类添加到所有元素;
  • 产生内联错误;
  • 等等;

谢谢.

html javascript forms jquery spine.js

16
推荐指数
2
解决办法
4685
查看次数

如何使用perftools和bundler来分析RSpec?

我需要分析我经常运行的测试套件bundle exec rspec spec/并生成GIF图像.

运行perftools.rb以使其与bundler一起正常工作的命令是什么?

ruby profiling rspec ruby-on-rails google-perftools

16
推荐指数
1
解决办法
1891
查看次数