小编cma*_*n77的帖子

在大型表上索引外键的最佳实践

我有一个大表(SQL Server 2008),有近300万行.它目前在其主键上有一个聚簇索引,在其外键上有一个非聚簇索引.

几乎所有表上的查询都是基于外键的读取.

  1. 我应该将表上的索引更改为与外键相对吗?
  2. 这样做的最佳流程是什么?

谢谢

sql sql-server indexing clustered-index

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

Rails Cache Key生成为ActiveRecord :: Relation

我试图产生一个片段缓存(使用达利/ Memcached的店),但是关键是被用"#"产生的关键的一部分,所以Rails的似乎并没有被承认,有一个缓存值,并击中数据库.

我在视图中的缓存键如下所示:

cache([@jobs, "index"]) do
Run Code Online (Sandbox Code Playgroud)

控制器具有:

@jobs = @current_tenant.active_jobs
Run Code Online (Sandbox Code Playgroud)

使用这样的实际Active Record查询:

def active_jobs
   self.jobs.where("published = ? and expiration_date >= ?", true, Date.today).order("(featured and created_at > now() - interval '" + self.pinned_time_limit.to_s + " days') desc nulls last, created_at desc")
end
Run Code Online (Sandbox Code Playgroud)

查看rails服务器,我看到缓存读取,但SQL查询仍然运行:

Cache read: views/#<ActiveRecord::Relation:0x007fbabef9cd58>/1-index 
Read fragment views/#<ActiveRecord::Relation:0x007fbabef9cd58>/1-index (1.0ms)
(0.6ms) SELECT COUNT(*) FROM "jobs" WHERE "jobs"."tenant_id" = 1 AND (published = 't' and expiration_date >= '2013-03-03')
  Job Load (1.2ms)  SELECT "jobs".* FROM "jobs" WHERE "jobs"."tenant_id" = 1 AND (published = …
Run Code Online (Sandbox Code Playgroud)

memcached caching ruby-on-rails dalli

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

您如何向 Devise user_signed_in 添加额外的范围?帮手?

我的身份验证需要独立于:

subdomain1.domain.com subdomain2.domain.com 等

现在使用设计user_signed_in?助手 - 如果有人在 subdomain1 上进行身份验证,则它正在 subdomain2 上工作。我想添加一个tenant_id 范围来防止这种情况发生。

我已经能够在我的模型中使用登录身份验证来做到这一点:

def self.find_for_database_authentication(warden_conditions)
      where(:email => warden_conditions[:email], :tenant_id => warden_conditions[:tenant_id]).first
end
Run Code Online (Sandbox Code Playgroud)

但我不清楚如何在登录支票上执行此操作。

谢谢!

ruby-on-rails devise warden

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

检查创建轨道上的记录是否成功创建

我正在循环遍历 CSV 并为每一行创建新记录。

如果记录创建成功,如何增加计数器?

这是我现有的代码:

Employer.create(employer) do |e|
   e.password = generated_password
   e.tenant = tenant
end
Run Code Online (Sandbox Code Playgroud)

我想增加一个计数器,就像i+=1工作一样.create

ruby-on-rails

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

Heroku Toolbelt安装问题

我卸载了heroku gem并安装了Heroku Toolbelt,并且遇到了让它与RVM一起工作的问题.

heroku version 命令适用于除当前项目文件夹以外的任

在我的项目文件夹中,我得到

'/Users/cmalpeli/.rvm/gems/ruby-1.9.3-p194@global/gems/bundler-1.1.3/lib/bundler/rubygems_integration.rb:223:in 'block in replace_bin_path': can't find executable heroku (Gem::Exception) from ./bundler_stubs/heroku:16:in`

which heroku在我的项目目录中运行返回:

./bundler_stubs/heroku

它回归的其他地方

/usr/bin/heroku

我确信它与RVM有关 - 但我不太明白它是如何工作的,所以会感激一点帮助.

谢谢!

heroku rvm heroku-toolbelt

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

为什么我会在Middleware/Rack中获得Rails 4.0.2哈希#diff中的Deprecation警告?

我正在将Rails 3.2应用程序升级到Rails 4,并且遇到了一些机架中间件的问题:

我收到以下错误: DEPRECATION WARNING: Hash#diff is no longer used inside of Rails, and is being deprecated with no replacement. If you're using it to compare hashes for the purpose of testing, please use MiniTest's assert_equal instead.

似乎触发它的行@app.call(env)来自以下:

 class NoWww

  def initialize(app)
    @app = app
  end

  def call(env)

    request = Rack::Request.new(env)

    if request.host =~ /^[^.]+\.[^.]+$/
      [301, {"Location" => request.url.sub("//","//www.")}, self]
    else
      @app.call(env)
    end

  end


  def each(&block)
  end

end
Run Code Online (Sandbox Code Playgroud)

请注意确定如何@app.call(env)触发此Hash#Diff Deprecation警告......?


UPDATE

我的中间件堆栈如下:

use Rack::Sendfile
use …
Run Code Online (Sandbox Code Playgroud)

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

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

Rails上周的最后一天bug?

我想要上周的最后一天.

今天是:

d = Date.today
=> Sun, 22 Nov 2015

d.at_end_of_week
=> Sun, 22 Nov 2015

d.at_end_of_week.last_week
=> Mon, 09 Nov 2015
Run Code Online (Sandbox Code Playgroud)

最后一个命令应该返回2015年11月15日星期一,不是吗?

这也返回相同的FYI:

Date.today.at_end_of_week.last_week
 => Mon, 09 Nov 2015
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

ruby datetime ruby-on-rails

0
推荐指数
1
解决办法
218
查看次数