小编eri*_*cvg的帖子

连接池问题与rufus-scheduler中的ActiveRecord对象有关

我正在使用rufus-scheduler来运行一些频繁的作业,这些作业使用ActiveRecord对象执行一些不同的任务.如果存在任何类型的网络或postgresql打嗝,即使在恢复之后,所有线程都会抛出以下错误,直到重新启动该进程:

ActiveRecord :: ConnectionTimeoutError(无法在5秒内获得数据库连接(等待5.000122687秒).最大池大小当前为5;考虑增加它.

重新启动postgres可以轻松复制错误.我已经尝试过玩游戏(最多15个),但是没有运气.

这让我相信连接只处于陈旧状态,我认为这将通过调用来解决clear_stale_cached_connections!.

有没有更可靠的模式来做到这一点?

传递的块是一个简单的选择和更新活动记录调用,并且恰好与AR对象有关.

rufus工作:

scheduler.every '5s' do
  db do
    DataFeed.update  #standard AR select/update
  end
end
Run Code Online (Sandbox Code Playgroud)

包装:

  def db(&block)
    begin
      ActiveRecord::Base.connection_pool.clear_stale_cached_connections!
      #ActiveRecord::Base.establish_connection    # this didn't help either way
      yield block
    rescue Exception => e
      raise e
    ensure
      ActiveRecord::Base.connection.close if ActiveRecord::Base.connection
      ActiveRecord::Base.clear_active_connections!
    end
  end
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails rufus-scheduler

15
推荐指数
2
解决办法
5532
查看次数

即使设置了allow_unconfirmed_access_for,为什么Devise不允许未经证实的用户登录?

我们有一个现有的用户群,并正在添加电子邮件确认.确认是可选的,但允许其他功能.用户无需确认.我添加了可确认模块并运行了迁移.确认按照广告宣传.

但是,用户无法登录,因为他们没有得到确认.所有当前用户都有零确认值,这是我们想要的(用户可以随时返回并确认他们的电子邮件).我已经关注了所有Devise wiki文章并在初始化程序中设置了allow_unconfirmed_access_for:

config.allow_unconfirmed_access_for = 10.years 
Run Code Online (Sandbox Code Playgroud)

我也尝试在我们的用户模型中设置它:

devise :confirmable, allow_unconfirmed_access_for: 10.years
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用其他值(1.5年,500天等)

我的SessionsController,与Devise的方法没有太大区别(这里是github)

class Users::SessionsController < Devise::SessionsController
  respond_to :json

  def new
    redirect_to "/#login"
  end

  def create
    resource = warden.authenticate(auth_options)
    if !resource
      render json: {error: "Invalid email or password" }, status: 401 and return
    end

    sign_in(resource_name, resource)
    render "sign_in", formats: [:json], locals: { object: resource }
  end
end
Run Code Online (Sandbox Code Playgroud)

设计的回应:

{"error":"您必须在继续之前确认自己的帐户."}

使用Rails 3.2.9设计2.1.2.

devise ruby-on-rails-3 devise-confirmable

12
推荐指数
2
解决办法
5699
查看次数

为什么respond_with没有从我的模型返回json?

为什么在这种情况下不响应_with响应json?我正在用一个明确的.json调用该动作(/tasks/4e3c1163a19d461203000106/items/4e4c27dfa19d46e0e400000a.json)

在我的控制器 -

class Tasks::TasksController < Tasks::BaseController
  respond_to :html, :js, :json

  def update
    @task = @taskgroup.update_task(params[:id], params[:task])
    @taskgroup.save
    respond_with @task
  end
end
Run Code Online (Sandbox Code Playgroud)

当我覆盖to_json并添加一个断点时,它没有被击中.回应是:

{}
Run Code Online (Sandbox Code Playgroud)

如果我用对to_json的显式调用替换respond_with:

respond_with @task do |format|
  format.json { render json: @task.to_json }
end
Run Code Online (Sandbox Code Playgroud)

反应很完美:

{
"_id":"4e4c27dfa19d46e0e400000a",
"assigned_to":null,
"comments"  [{"_id":"4e4c2fd7a19d46e127000014", 
[SNIP]
Run Code Online (Sandbox Code Playgroud)

它在后一种情况下工作正常,但我想弄清楚为什么第一个不起作用.这适用于我的应用程序中的其他控制器和模型.不确定它是否是一个mongoid的东西?(rails 3.0.9/mongoid 2.1.8)

mongoid ruby-on-rails-3

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

使用RubyInstaller 1.9.1 RC2后在Windows上启动mongrel时出错

我通过可从RubyInstaller 1.9.1 RC2安装了Ruby RubyForge的,更新的宝石,并安装导轨.使用webrick,一切都运行良好.为了好玩,我使用"gem install mongrel"安装了mongrel.装置很顺利:

Successfully installed gem_plugin-0.2.3
Successfully installed cgi_multipart_eof_fix-2.5.0
Successfully installed mongrel-1.1.5-x86-mingw32
3 gems installed
Installing ri documentation for gem_plugin-0.2.3...
Installing ri documentation for cgi_multipart_eof_fix-2.5.0...
Installing ri documentation for mongrel-1.1.5-x86-mingw32...
Updating class cache with 1162 classes...
Installing RDoc documentation for gem_plugin-0.2.3...
Installing RDoc documentation for cgi_multipart_eof_fix-2.5.0...
Installing RDoc documentation for mongrel-1.1.5-x86-mingw32...
Run Code Online (Sandbox Code Playgroud)

现在,当我使用"ruby脚本/服务器"启动Web服务器时,我收到错误:

"程序无法启动,因为您的计算机缺少msvcrt-ruby18.dll."

然后,webrick启动并正常运行.

我猜测它是使用Rails 1.9的问题而mongrel期望1.8?(我是铁杆新手,没有真正的理由让我使用杂种......只是戳了一下)

windows mongrel ruby-on-rails

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

在jquery-tmpl {{each}}语句中访问对象属性的正确方法

我正在使用jquery-tmpl.我的对象模型很简单 - SalesProspect,它包含一组SalesProspectAction对象.这两个对象都有一个名为Status的字段.如何在每个循环中获取孩子的状态?它总是牵引父母的.

<script id="tmplActions" type="text/x-jquery-tmpl">
    <p>${GuestName}</p>
    <table class="stdtable" cellpadding="3" cellspacing="0" width="100%">
        <thead><tr><td>Date</td><td>By</td><td>Changed To</td><td>Notes</td></tr></thead>
        <tbody>
            {{each(i,action) SalesProspectActions}}
            <tr>
                <td>${DateCreated}</td>
                <td>${CreatedBy}</td>
                <td>${Status}</td>
                <td>${Notes}</td>
            </tr>
        {{/each}}
        </tbody>
    </table>
</script>
Run Code Online (Sandbox Code Playgroud)

我尝试了一些不同的东西,比如{$action.Status}等,但没有运气.

jquery jquery-templates

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

通过LINQ中的子属性对父对象进行排序

如何在LINQ中按子对象排序?

类A,B和C. A有B的集合,B有C的集合.我想通过C的Ordinal(int)属性来命令对象A.

var query = from a in db.A
        orderby a.Bs.OrderBy(x=> x.C.Ordinal)   <--- ??
        select a;
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚orderby声明.

编辑:

对不起,我的原始陈述不正确:

A有B和B的集合,持有C对象.C不是一个集合.

每个A应按C的序数属性订购.

另一个编辑/解决方案:

我最终在显示器上为A中的每个B集合在客户端上做了一个.OrderBy(b => bCOrdinal).无论如何,事情变得更好,因为我可以让客户端按照他们需要的任何顺序排序,而不是将其嵌入我的存储库中.

c# linq

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

使用CultureAndRegionInfoBuilder更新内置的.Net文化

我正在尝试使用以下方法更改内置的.Net文化fr-CA:

    CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("fr-CA", CultureAndRegionModifiers.Replacement);

    try
    {
        Console.WriteLine("Updating " + cib.CultureName);

        cib.NumberFormat.CurrencyGroupSeparator = ",";
        cib.NumberFormat.CurrencyDecimalSeparator = ".";
        cib.NumberFormat.NumberGroupSeparator = ",";
        cib.NumberFormat.NumberDecimalSeparator = ".";

        cib.Register();

        Console.WriteLine("Culture updated.");
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        Console.ReadKey();
    }
Run Code Online (Sandbox Code Playgroud)

但是,Register()调用失败,出现"System.InvalidOperationException:'Register'方法失败,因为自定义文化'fr-CA'已经存在."

是否有可能更新内置文化?根据文档(http://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder.cultureandregioninfobuilder.aspx),看起来我可以更新它,尽管我可能会读错了.

.net c# internationalization

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