我正在使用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) 我们有一个现有的用户群,并正在添加电子邮件确认.确认是可选的,但允许其他功能.用户无需确认.我添加了可确认模块并运行了迁移.确认按照广告宣传.
但是,用户无法登录,因为他们没有得到确认.所有当前用户都有零确认值,这是我们想要的(用户可以随时返回并确认他们的电子邮件).我已经关注了所有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.
为什么在这种情况下不响应_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)
我通过可从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?(我是铁杆新手,没有真正的理由让我使用杂种......只是戳了一下)
我正在使用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}等,但没有运气.
如何在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).无论如何,事情变得更好,因为我可以让客户端按照他们需要的任何顺序排序,而不是将其嵌入我的存储库中.
我正在尝试使用以下方法更改内置的.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),看起来我可以更新它,尽管我可能会读错了.