简单的问题.我有一个ActiveRecord模型,我希望在保存记录后执行后期处理.所以在模型中我有一个queue_for_processing方法,可以将作业粘贴到我的Resque队列中.为了在我的记录成功持久化后执行此操作,我在我的模型中编写了以下内容:
after_create :queue_for_processing
Run Code Online (Sandbox Code Playgroud)
很简单.我原以为一切都按预期工作除了昨晚我的redis服务器发生故障,事情发生了变化.我的期望是记录仍然会被保存,我可以稍后手动处理该作业.但是queue_for_processing方法抛出异常(预期行为)并停止保存记录.
我误解了after_create是如何工作的吗?或者我的理解是否正确并且发生了什么时髦?
谢谢.
我有一个控制器,我正在缓存show动作.show动作有许多安全过滤器,用于执行和重定向,如果用户没有登录,不是当前组的成员等.这些过滤器在我没有打开缓存时工作正常,但是当我打开开关以转换缓存之前,不再执行过滤器(我的调试器调用未被命中).
我一直认为,在为缓存操作调用过滤器之前,这是页面缓存和操作缓存之间的主要区别.这由操作缓存的Rails缓存教程部分支持,其中包括:
操作缓存的工作方式类似于页面缓存,除了传入的Web请求确实从Web服务器传递到Rails堆栈和Action Pack,以便在提供缓存之前可以在其上运行过滤器.这允许在仍然提供缓存副本的输出结果的同时运行身份验证和其他限制.
那么为什么我的前过滤器不会被调用?
关于我的设置:Rails 3.1使用Devise进行身份验证.我正在使用dalli gem作为memcached商店.
这里有一些代码总结了我的代码(很多琐事):
class GroupsController < ApplicationController
caches_action :show
cache_sweeper :group_sweeper
before_filter :authenticate_user!, :except => [:index]
before_filter :init_group, :except => [:new, :create, :index]
before_filter :requires_group_membership, :except => [:new, :create, :index]
def show
end
private
def requires_group_membership
if current_user and !@group.users_active.index(current_user).nil?
return true
else
redirect_to :root
return false
end
end
def init_group
@group = current_user.active_groups.find_by_id(params[:id])
if @group.nil?
redirect_to :root
return false
end
end
Run Code Online (Sandbox Code Playgroud)
那么,有没有人见过这种行为呢?在理解过滤器和动作缓存应该如何工作之前,我是否有一个漏洞?或者也许我有一些奇怪的voodo发生与奇怪的宝石版本组合?
[编辑]
有趣的是,我刚刚了解到返回值对是否运行链中的方法没有影响,而是调用重定向还是渲染.
[编辑2]
我将我的应用程序升级到rails 3.2.3以查看它是否有效,但没有解决问题.我发现的东西是在ApplicationController中定义的before过滤器被调用,但是我的GroupsController中的过滤器却没有被调用.
我的一个网站表现得很奇怪.布局有时很好,有时候很麻烦.我看到问题的示例页面是这一个:链接
免责声明:我尚未认真开始对事业进行调查.我转向Stackoverflow因为我很懒,我希望有人会说"这件事发生在我身上,可能就是这个......".所以,请问,如果这是你从未见过的事情,没有人会陷入这个问题,因为这不公平,因为我自己没有这样做.
好的,一些背景:
无论如何,我希望以前有人发生这种情况,修复起来非常简单.如果没有,我会去调查并返回解决方案(或请求更多帮助).
提前致谢!
詹姆士.
[编辑]我添加了前两个要点,受到评论和第一个答案的启发[/ edit]
我在最后一天一直在和它搏斗,它正在驱使我努力!
作为一个学习练习,我决定将一些代码打包成Rails Gem.这段代码有一个控制器动作,一个路由,一个模型和一个帮助器,所以我认为最合适的创建Gem的方法是将它创建为Rails引擎.
除了一件事,一切似乎都运作良好.当我尝试从Controller或Views(使用引擎的应用程序)中引用模型时,例如:
@su = Shortener::ShortenedUrl.generate("http://stackoverflow.com")
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
uninitialized constant Shortener::ShortenerHelper::ShortenedUrl
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为当我从项目控制台执行代码时,不会发生错误.我认为这是因为我已将所有代码放入"Shortener"命名空间/模块中.我这样做是为了避免在其他应用程序中使用时发生冲突.
代码文件层次结构如下所示:
这里是有问题的重要文件的类/模块声明代码(删除了内容)
应用程序/控制器/缩短器/ shortened_urls_controller
module Shortener
class ShortenedUrlsController < ::ApplicationController
# find the real link for the shortened link key and redirect
def translate
# convert the link...
end
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序/模型/缩略服务/ shortened_urls
module Shortener
class ShortenedUrl < ActiveRecord::Base
# a number of validations, methods etc
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序/佣工/缩略服务/ shortener_helper
module Shortener::ShortenerHelper
# generate a url from either a url string, or a shortened url object
def shortened_url(url_object, …
Run Code Online (Sandbox Code Playgroud) rubygems ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3
我正在试验AWS Api Gateway 的测试版“HTTP API”功能。
作为本实验的一部分,我尝试使用“JWT Authorizer”授权对 api 的访问:
https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html
该文档指出,在授权或拒绝 JWT 之前,JWT 将经历一个工作流程,其中包括对 JWT 进行一系列检查/验证。
无需授权者即可访问端点。通过授权者,我收到带有 json 的 401 响应:
{"message":"Unauthorized"}
Run Code Online (Sandbox Code Playgroud)
我正在尝试找出授权者在哪一步拒绝 JWT。我已经为 api 端点设置了日志并看到了传入的请求,但它没有提供有关授权失败原因的见解。
有没有办法调试授权者失败的原因/位置?
注意:这不是在谈论 lamda 授权者,我也没有使用 Cognito 生成 JWT。
我想创建一个辅助方法来自动输出带有:maxlength属性的text_fields.我希望根据字段属性validates_length验证中指定的:max来设置此maxlegth,以便保持DRY.
我的问题是:是否有一种很好的方法来检查对象属性上存在的验证,然后从该验证中提取最大长度.
我还计划从validates_format中提取其他内容,例如正则表达式,这样我就可以在text_field上设置一个属性,然后js可以使用该属性来运行客户端验证.
谢谢.
加分点:为什么没有Rails自动为我们添加maxlength到文本字段?
我想开始使用Ajax事件ajax:success,ajax:failure,ajax:complete和ajax:beforeSend,建议用于以下帖子中的不显眼的Javascript:
但由于某种原因,它不适合我.我错过了一些东西(小东西),因为我无法让事件触发我的Javascript.我希望有人能在我的代码中发现"明显的"错误/遗漏.
关于我的环境的一些细节:
为了尝试找出我所缺少的东西,我创建了一个简单的测试应用程序,它只有一个远程按钮.单击按钮时,我想要触发警报框.这个应用程序的代码可以在github上看到:
http://github.com/jpmcgrath/rbtest
我已将应用程序部署到heroku:
http://rbtest.heroku.com/projects/
如果你查看应用程序,你可以单击按钮,按钮成功创建一个新项目(看它手动刷新),但ajax:成功事件似乎不会发生?
代码的内容如下:
在projects_controller.rb中
def remote_test
@project = Project.new(:name => "remote test")
respond_to do |format|
if @project.save
puts "project saved!\n\n\n"
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render json: @project, status: :created, location: @project }
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
Run Code Online (Sandbox Code Playgroud)
在application.js中
jQuery(document).ready(function() {
jQuery(".remote_button").click(function() {
alert('Handler for .click() called.'); …
Run Code Online (Sandbox Code Playgroud) jquery unobtrusive-javascript ruby-on-rails-3 ruby-on-rails-3.1
是否可以使用Facebook图形API来标记相册中的人物?注意:我不想标记单张照片,而是整张专辑.
我已经尝试了facebook Graph API资源管理器,并且发现当您用相册替换照片的ID时,在照片中标记Facebook用户的POST请求不起作用.它回来了
{
"error": {
"message": "Unsupported post request.",
"type": "GraphMethodException",
"code": 100
}
Run Code Online (Sandbox Code Playgroud)
}
请注意:我的问题不是这个问题的重复,因为我的问题是关于标记专辑而不是照片.
activerecord ×2
after-create ×1
caching ×1
css ×1
facebook ×1
jquery ×1
resque ×1
rubygems ×1
validation ×1