小编Nie*_*ian的帖子

Rails:验证3列的唯一组合

嗨,我不想在我的表中验证3列的独特组合.

假设我有一个名为cars的表,其值为:brand,:model_name和:fuel_type.

我当时想要的是根据这些记录的组合来验证记录是否是唯一的.例如:

    brand    model_name    fuel_type
    Audi     A4            Gas
    Audi     A4            Diesel
    Audi     A6            Gas
Run Code Online (Sandbox Code Playgroud)

应该都有效.但"奥迪,A6,气体"的另一项记录不应该有效.

我知道这个验证,但我怀疑它实际上做了我想要的.

    validates_uniqueness_of :brand, :scope => {:model_name, :fuel_type}
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3

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

如何理解EXPLAIN ANALYZE

我对查看EXPLAIN ANALYZE结果不是很熟悉,我的查询太慢了,我遇到了很大的问题.我试图阅读如何解释解释查询的结果,但我仍然不知道我应该寻找什么,以及可能出错的地方.我有一种感觉,某处有一些大红灯闪烁,我只是看不到它.

所以查询很简单,看起来像这样:

EXPLAIN ANALYZE SELECT "cars".* FROM "cars" WHERE "cars"."sales_state" = 'onsale' AND "cars"."brand" = 'BMW' AND "cars"."model_name" = '318i' AND "cars"."has_auto_gear" = TRUE  LIMIT 25 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

结果如下:

Limit  (cost=0.00..161.07 rows=25 width=1245) (actual time=35.232..38.694 rows=25 loops=1)
  ->  Index Scan using index_cars_onsale_on_brand_and_model_name on cars  (cost=0.00..1179.06 rows=183 width=1245) (actual time=35.228..38.652 rows=25 loops=1)
        Index Cond: (((brand)::text = 'BMW'::text) AND ((model_name)::text = '318i'::text))
        Filter: has_auto_gear"
Total runtime: 38.845 ms
Run Code Online (Sandbox Code Playgroud)

一点背景:我在Postgresql 9.1.6上,在Herokus专用数据库上运行.我的数据库有大约7,5Gb内存,表车包含3,1M行,并且行中有2,0M的行有sales_state ='onsale'.该表有170列.它使用的索引如下所示:

CREATE INDEX index_cars_onsale_on_brand_and_model_name
  ON cars
  USING btree
  (brand COLLATE pg_catalog."default" …
Run Code Online (Sandbox Code Playgroud)

postgresql performance database-design postgresql-performance

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

Redis:无法打开.rdb进行保存:权限被拒绝

我在ubuntu 12.04上使用ubuntu apt-get安装了redis服务器2.8.

我从其他数据库复制了dump.rdb.现在,当我尝试启动新服务器时,我不断得到:

[35763] 04 Mar 01:51:47.088 * 1 changes in 900 seconds. Saving...
[35763] 04 Mar 01:51:47.088 * Background saving started by pid 43313
[43313] 04 Mar 01:51:47.088 # Failed opening .rdb for saving: Permission denied
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

redis

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

Heroku上的奇怪的TTFB(第一个字节的时间)问题

我们正在改进我们在Heroku托管的rails应用程序的性能(rails 3.2.8和ruby 1.9.3).在此过程中,我们遇到了一个令人担忧的问题,其源头似乎非常难以追踪.让我快速解释一下我们如何解决问题以及我们如何尝试隔离它.

-

从6月左右开始,我们在整个网站的Time to First Byte中经历了奇怪的滞后行为.使用该站点时显而易见的问题(有时候应用程序没有响应10-20秒),并且它也通过webpagetest.org出现在瀑布分析中.我们的总部设在丹麦,但是从任何主机那里得到了这个结果.

为了确认问题,我们进行了基准测试,我们向一个简单的页面发送了300个相同的请求并测量了响应时间.如果我们向首页发送300个请求,则中位响应时间低于1秒,这是相当不错的.令我们感到害怕的是,60个请求占用的时间增加了一倍,而其中40个请求占用的时间超过4秒.有些请求需要16秒.

这些缓慢的请求都没有出现在我们用于性能监控的New Relic中.无论我们的Web流程规模有多高,都不会显示请求排队,结果也是一样的.尽管如此,我们还是拒绝承认问题是由应用程序代码引起的,所以我们尝试了另一个实验,我们通过机架中间件响应请求.

通过在机架堆叠的开始将这种中间件(TestMiddleware),我们返回的请求之前就击中了应用程序,确保不会影响下面的中间件或Rails应用程序可能会导致延迟.

Middleware setup:
$ heroku run rake middleware
use Rack::Cache
use ActionDispatch::Static
use TestMiddleware
use Rack::Rewrite
use Rack::Lock
use Rack::Runtime
use Rack::MethodOverride
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use Rack::Sendfile
use ActionDispatch::Callbacks
use ActiveRecord::ConnectionAdapters::ConnectionManagement
use ActiveRecord::QueryCache
use ActionDispatch::Cookies
use ActionDispatch::Session::DalliStore
use ActionDispatch::Flash
use ActionDispatch::ParamsParser
use ActionDispatch::Head
use Rack::ConditionalGet
use Rack::ETag
use ActionDispatch::BestStandardsSupport
use NewRelic::Rack::BrowserMonitoring
use Rack::RailsExceptional
use OmniAuth::Builder
run AU::Application.routes
Run Code Online (Sandbox Code Playgroud)

然后我们运行相同的脚本来记录响应时间并得到几乎相同的结果.平均响应时间约为130MS(显然更快,因为它没有击中的应用程序,但仍然60请求了超过400个毫秒和25个请求花了超过1秒.同样,一些16秒钟缓慢请求.

一种解释可能与网络上的慢速跳跃或DNS设置有关,但traceroute的结果看起来非常好.

通过在Heroku上托管的另一个rails 3.2和ruby 1.9.3应用程序上运行响应脚本来确认此结果 …

performance ruby-on-rails heroku newrelic

22
推荐指数
1
解决办法
3450
查看次数

Rails 4:在生产环境中的控制台中显示SQL

升级到rails 4后,当我在生产中的服务器上的rails控制台中执行命令时,不再显示已执行的SQL.如何在不损害性能的情况下再次启用它?

ruby-on-rails ruby-on-rails-4

22
推荐指数
1
解决办法
7550
查看次数

需要Heroku数据库性能体验吗?

我们的智能搜索引擎/聚合器正在经历一些严重的扩展挑战.我们的数据库拥有大约200k个对象.从分析和新版本来看,我们的大部分麻烦似乎都来自数据库.我们正在使用Heroku提供的最小的专用数据库(Ronin).

我们一直在研究索引和缓存.到目前为止,我们设法通过减少数据库调用和智能缓存内容来解决我们的问题,但现在甚至这似乎已经结束了.我们不断问自己,我们的代码/配置是否足够好,或者我们是否只是没有使用足够的"硬件".

我们怀疑我们从Heroku购买的数据库解决方案可能表现不佳.例如,在200k项目上进行简单计数(无连接,无任何操作)大约需要250ms.这似乎很长一段时间,尽管postgres以其糟糕的表现而闻名?

我们还开始使用基于纬度/经度的地理定位查找.两列都是索引浮点数.进行距离计算涉及相当复杂的数学,但我们使用的是非常好推荐的geocoder宝石,怀疑它运行非常优化的查询.甚至地理编码器仍然需要4-10秒来执行查找,比如说40.000个对象,只返回第一个最接近10的限制.这听起来好像很长一段时间,我们咨询的所有有经验的人说这听起来很奇怪,再次暗示数据库性能.

基本上我们想知道:我们对数据库有什么期望?可能有问题吗?如果我们决定升级,我们还能期待什么呢?

我的另一个问题是:我在这里读到,我们可以通过将整个数据库加载到内存中来提高性能.我们是否应该自己配置,如果是这样的话?

关于最后一个问题的更新: 我从Heroku支持的乐于助人的人那里得到了这个:

"这意味着有足够的内存(足够大的专用数据库)将热数据集存储在内存中.这不是你必须手动完成的事情,Postgres配置自动使用我们专用数据库上的所有可用内存.

我看了一下你的数据库,看起来你现在正在使用大约1.25 GB的RAM,所以你还没有最大化你的内存使用量."

更新数字和数字

好的,现在我有时间查看数字和数字,我将尝试回答以下问题:

  • 首先,数据库由大约29个表组成,并且有很多关系.但实际上,大多数查询都是在一个表上完成的(一些额外的资源被加入,为视图提供所有需要的信息).
  • 该表有130列.
  • 目前它拥有大约20万条记录,但只有70k是活跃的 - 因此所有索引都作为这个"状态"的部分索引.
  • 我们搜索的所有列都正确索引,没有一个是文本类型,很多只是布尔值.

问题的答案:

  1. 嗯基线性能很难说,我们有很多不同的选择.所需的时间通常在90ms到250ms之间变化,选择20行的限制.我们在同一张桌子上有很多计数,从250毫秒到800毫秒不等.
  2. 嗯,这很难说因为他们不会试一试.
  3. 我们有大约8-10个用户/客户端同时运行请求.
  4. 我们的查询加载:在新文件的数据库报告中,它说过去24小时: throughput: 9.0 cpm, total time: 0.234 s, avg time: 25.9 ms
  5. 是的,我们已经检查了长时间运行的查询的查询计划.计数查询速度特别慢,通常超过500毫秒,对索引列上的70k记录进行非常简单的计数,结果大约为300

postgresql performance database-design ruby-on-rails heroku

20
推荐指数
2
解决办法
3986
查看次数

在mac osx 10.10上通过自制软件安装git导致:错误:权限被拒绝 - /usr/local/lib/perl5/site_perl/5.18.2

嗨,我刚试过在我的mac上通过自制软件安装git - 出了点问题.我安装了mac app的github,但我尝试删除它.我系统中当前的git版本是:

Nielsk@~: $ git --version
git version 1.9.3 (Apple Git-50)
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过自制软件安装git会发生这种情况:

Nielsk@~: $ brew install git
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/git-2.1.3.y
######################################################################## 100,0%
==> Pouring git-2.1.3.yosemite.bottle.tar.gz
==> Caveats
The OS X keychain credential helper has been installed to:
  /usr/local/bin/git-credential-osxkeychain

The 'contrib' directory has been installed to:
  /usr/local/share/git-core/contrib

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completion has been installed to:
  /usr/local/share/zsh/site-functions
Error: An unexpected error occurred during the `brew link` step
The formula built, but is not symlinked into …
Run Code Online (Sandbox Code Playgroud)

git macos homebrew github

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

干净安装OSX 10.9.1在尝试安装gem时返回"undefined method`path2class'"

我刚用Homebrew和RVM安装了一个干净的Mavericks安装.双方brew doctorrvm requirements返回"都好",但是,当我跑bundle install在我的项目目录我的大部分宝石安装好的,但少数失败,同一以下错误安装:

Bundler::GemspecError: Could not read gem at /Users/NK/.rvm/gems/ruby-2.0.0-p353/cache/eventmachine-1.0.3.gem. It may be corrupted.
An error occurred while installing eventmachine (1.0.3), and Bundler cannot continue.
Make sure that `gem install eventmachine -v '1.0.3'` succeeds before bundling.
Run Code Online (Sandbox Code Playgroud)

然后,如果我再试一次,gem install eventmachine -v '1.0.3'我得到:

ERROR:  Error installing eventmachine:
    invalid gem: package is corrupt, exception while verifying: undefined method `path2class' for #<Psych::ClassLoader:0x000001018f7990> (NoMethodError) in /Users/NK/.rvm/gems/ruby-2.0.0-p353/cache/eventmachine-1.0.3.gem
Run Code Online (Sandbox Code Playgroud)

我试图破坏RVM并重新安装,但没有任何帮助.

其他人似乎也有同样的问题,但似乎还没有人为这个答案提供资金:

编辑

看到这两个: …

ruby rubygems bundler rvm psych

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

在没有停止/启动或弹性IP的情况下更改EC2实例的公共IP地址

我正在EC2上运行ubuntu AMI.是否可以为正在运行的EC2实例分配/请求新的公共IP地址而不终止它并再次启动它?请注意,我对使用弹性IP功能不感兴趣,我只想使用EC2分配的常规随机公共IP地址.

ip ubuntu amazon-ec2

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

Rails 5 Heroku部署错误:ExecJS :: ProgramError:SyntaxError:意外的令牌:name(autoRegisterNamespace)

当尝试将rails 5应用程序部署到heroku时,我遇到以下错误Running: rake assets:precompile:

remote:        ExecJS::ProgramError: SyntaxError: Unexpected token: name (autoRegisterNamespace) (line: 14767, col: 7, pos: 457487)
remote:        Error
remote:        at new JS_Parse_Error (<eval>:3623:11948)
remote:        at js_error (<eval>:3623:12167)
remote:        at croak (<eval>:3623:21858)
remote:        at token_error (<eval>:3623:21995)
remote:        at unexpected (<eval>:3623:22083)
remote:        at semicolon (<eval>:3623:22601)
remote:        at simple_statement (<eval>:3623:25779)
remote:        at <eval>:3623:23567
remote:        at <eval>:3623:22774
remote:        at block_ (<eval>:3623:27903)
remote:        at <eval>:3623:23677
remote:        at <eval>:3623:22774
remote:        new JS_Parse_Error ((execjs):3623:11948)
remote:        js_error ((execjs):3623:12167)
remote:        croak ((execjs):3623:21858)
remote:        token_error ((execjs):3623:21995)
remote: …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails heroku uglifyjs execjs

16
推荐指数
3
解决办法
5719
查看次数