小编Jam*_*ath的帖子

Rails:after_create停止保存时出现异常

简单的问题.我有一个ActiveRecord模型,我希望在保存记录后执行后期处理.所以在模型中我有一个queue_for_processing方法,可以将作业粘贴到我的Resque队列中.为了在我的记录成功持久化后执行此操作,我在我的模型中编写了以下内容:

after_create :queue_for_processing
Run Code Online (Sandbox Code Playgroud)

很简单.我原以为一切都按预期工作除了昨晚我的redis服务器发生故障,事情发生了变化.我的期望是记录仍然会被保存,我可以稍后手动处理该作业.但是queue_for_processing方法抛出异常(预期行为)并停止保存记录.

我误解了after_create是如何工作的吗?或者我的理解是否正确并且发生了什么时髦?

谢谢.

activerecord ruby-on-rails resque after-create

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

Rails caches_action正在跳过before_filters

我有一个控制器,我正在缓存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中的过滤器却没有被调用.

caching ruby-on-rails ruby-on-rails-3 action-caching

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

为什么我的CSS"有时"变得棘手

我的一个网站表现得很奇怪.布局有时很好,有时候很麻烦.我看到问题的示例页面是这一个:链接

免责声明:我尚未认真开始对事业进行调查.我转向Stackoverflow因为我很懒,我希望有人会说"这件事发生在我身上,可能就是这个......".所以,请问,如果这是你从未见过的事情,没有人会陷入这个问题,因为这不公平,因为我自己没有这样做.

好的,一些背景:

  • 通常(可能总是)在第一次查看页面时出现问题
  • 问题不会总是出现,有时只会出现
  • 当页面显示为munged时,如果你刷新它通常重新加载看起来应该
  • 该网站是一个rails应用程序
  • css通过整洁的Smurf Gem传递,它会自动缩小页面上的CSS和Javascript.
  • firefox(linux和winXP)都会出现布局问题
  • 使用":cache => true"选项在生产环境中提供CSS,该选项将所有css文件连接成一个文件

无论如何,我希望以前有人发生这种情况,修复起来非常简单.如果没有,我会去调查并返回解决方案(或请求更多帮助).

提前致谢!

詹姆士.

[编辑]我添加了前两个要点,受到评论和第一个答案的启发[/ edit]

css ruby-on-rails

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

从Rails 3.1引擎访问模型

我在最后一天一直在和它搏斗,它正在驱使我努力!

作为一个学习练习,我决定将一些代码打包成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

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

调试 AWS HTTP API(测试版)JWT 授权程序

我正在试验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。

amazon-web-services aws-api-gateway

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

如何检查ActiveRecord :: Base Objects上存在的验证

我想创建一个辅助方法来自动输出带有:maxlength属性的text_fields.我希望根据字段属性validates_length验证中指定的:max来设置此maxlegth,以便保持DRY.

我的问题是:是否有一种很好的方法来检查对象属性上存在的验证,然后从该验证中提取最大长度.

我还计划从validates_format中提取其他内容,例如正则表达式,这样我就可以在text_field上设置一个属性,然后js可以使用该属性来运行客户端验证.

谢谢.

加分点:为什么没有Rails自动为我们添加maxlength到文本字段?

validation activerecord ruby-on-rails

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

Rails 3.1远程按钮不引人注目的Javascript事件未被捕获(JQuery)

我想开始使用Ajax事件ajax:success,ajax:failure,ajax:complete和ajax:beforeSend,建议用于以下帖子中的不显眼的Javascript:

但由于某种原因,它不适合我.我错过了一些东西(小东西),因为我无法让事件触发我的Javascript.我希望有人能在我的代码中发现"明显的"错误/遗漏.

关于我的环境的一些细节:

  • Rails 3.1
  • jQuery(jquery-rails gem)
  • 用于服务器端js处理的therubyracer(不是说它对我的例子来说很重要)

为了尝试找出我所缺少的东西,我创建了一个简单的测试应用程序,它只有一个远程按钮.单击按钮时,我想要触发警报框.这个应用程序的代码可以在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

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

使用Facebook API标记相册

是否可以使用Facebook图形API来标记相册中的人物?注意:我不想标记单张照片,而是整张专辑.

我已经尝试了facebook Graph API资源管理器,并且发现当您用相册替换照片的ID时,在照片中标记Facebook用户的POST请求不起作用.它回来了

{
  "error": {
  "message": "Unsupported post request.", 
  "type": "GraphMethodException", 
  "code": 100
}
Run Code Online (Sandbox Code Playgroud)

}

请注意:我的问题不是这个问题的重复,因为我的问题是关于标记专辑而不是照片.

facebook facebook-graph-api

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