小编Max*_*nce的帖子

为现有模型创建rspec文件(初学者)

我有一个Rails应用程序与一个模型(遵循教程),我忘了在开始时安装gem Rspec.我现在已经完成了,但Spec文件和文件夹没有显示出来.

我已阅读以下内容:如何为现有控制器生成规格? 并尝试了一些生成文件的命令行(我是noob我不知道它实际上做了什么)

但是没有新的Spec文件!

是因为我有模特而不是控制器吗?什么是正确的命令行?或者我可以直接创建它们并使用什么名称?

rspec ruby-on-rails-4

8
推荐指数
2
解决办法
8971
查看次数

如果万能钥匙损坏,Rails的新凭证会产生更大的风险?

直到现在,我仍以通常的方式处理我的应用程序秘密:

  • 开发中:我的机密未加密地存储在secrets.yml文件中。secrets.yml文件未提交到Github并保留在我的计算机上。

    根据AWS建议,我的角色可以让我拥有特定于开发的密钥。这样可以将我的开发键限制为某些功能,这些功能的范围与生产键不同。

  • 在生产中:我的密钥存储在Heroku中,就像ENV["AWS_SES_KEY"]在Windows中一样调用config/environments/production.rb

我非常喜欢它,因为万一我的计算机被盗了,可以在AWS上擦除开发密钥,然后这些密钥会损坏,而无需触摸生产密钥。并且由于开发密钥可以限制在AWS的特定操作范围内,因此可以防止任何危险的更改(完全删除存储桶...)

现在我们有了凭据,如果我没记错的话,所有密钥(开发和生产)都在同一个加密文件中。主密钥是现在播种到Heroku的唯一环境密钥。虽然我仍然需要在本地使用此密钥才能访问凭据。然后,如果我的计算机被盗,开发密钥和生产密钥都将损坏,并可能对我的生产应用程序产生更高的风险。

我的新凭证功能是否缺少某些功能?有什么办法可以避免上述问题?

secrets.yml用于开发人员密钥和credentials.yml.enc生产密钥的功能是什么,这是什么目的?

ruby-on-rails ruby-on-rails-5.2

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

重试ajax调用,直到成功

基于此当前代码,我有一个Ajax调用,我想在失败时重试:

$.ajax({
        url: "<%= my_ruby_on_rails_controller_url_here %>",
        datatype: "json",
        type: "GET",
        success: function (json) {
            document.getElementById("factureload" + json.hashed_id).innerHTML = "<a href='" + json.address + "'><img class='pdficonstyling' src='/assets/pdf4.svg' alt='pdf icon' /> facture_" + json.numfacture + "</a>";
        },
        error: function () {
            alert("fail");

        }
    });
Run Code Online (Sandbox Code Playgroud)

我试图将其封装在一个新函数中,并在error(与setTimeout)中对此函数进行了回调,但是它从未启动...

也可能有并发的Ajax调用,例如针对不同dom元素的该调用。

(有这个有用的线程,但是我在JS中非常糟糕,我无法使其适应我的代码。如何重复ajax调用直到成功

javascript

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

从工作人员内部重试 Sidekiq 工作人员

在我的应用程序中,我尝试按顺序执行两个工作任务。首先,使用 Wicked pdf 创建 PDF,然后在创建 PDF 后,将附有 PDF 的电子邮件发送给两个不同的收件人。

这就是控制器中的调用:

PdfWorker.perform_async(@d.id)
MailingWorker.perform_in(1.minutes, @d.id,@d.class.name.to_s)
Run Code Online (Sandbox Code Playgroud)

第一个工作人员创建 PDF,第二个工作人员发送电子邮件。

这是第二个工人:

class MailingWorker
  include Sidekiq::Worker
  sidekiq_options retry: false    
  def perform(d_id,model)

    @d = eval(model).find(d_id)
    @model = model
    if @d.pdf.present?
      ProfessionnelMailer.notification_d(@d).deliver
      ClientMailer.notification_d(@d).deliver
    else
      MailingWorker.perform_in(1.minutes, @d.id, @model.to_s)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

if 语句检查 PDF 是否已创建。如果确实发送了两封邮件,否则,一分钟后再次调用同一工作人员,只是为了让 Heroku 服务器有额外的时间来处理 PDF 创建,以防需要更多时间或排很长的队列。

但如果 PDF 确实处理失败,上面的结果就会陷入无限循环。

有没有办法来解决这个问题 ?

我看到的一种选择是调用 PDF 创建工作人员内部的第二个工作人员,尽管我真的不想将工作人员嵌套得太深。将它们分开使我的控制器更加清晰,我可以看到操作的顺序。但欢迎任何建议。

另一种选择是使用sidekiq_options retry: 5并请求控制器重试,该重试可计入总共 5 次重试,而不是重试工作人员,else MailingWorker.perform_in(1.minutes, @d.id, @model.to_s)但我不知道如何执行此操作。根据此线程https://github.com/mperham/sidekiq/issues/769它将引发异常,但我不确定如何执行此操作...(我也不确定重试将等待多长时间在使用异常方法处理之前,通过上面的解决方案我可以控制时间范围..)

ruby-on-rails sidekiq ruby-on-rails-5

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

ActiveStorage for S3专用文件

直到现在,我还使用Paperclip将一些文件上传到S3。其中一些文件不是公开的,并且允许Paperclip通过以下位将某些文件作为私有文件上载:

has_attached_file :image, styles: { large: "2000x2000", small: "1200x1200", thumb: "250x250"}, :s3_permissions => :private
Run Code Online (Sandbox Code Playgroud)

现在不推荐使用Paperclip,尽管我没有找到任何使某些文件私有的选项,但我正在考虑切换到Active Storage。

是否可以在Active Storage中进行一些调整以允许此操作?

ruby-on-rails rails-activestorage ruby-on-rails-5.2

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

检索回形针图像的尺寸

我正在尝试检索回形针图像的尺寸。我尝试调用方法widthheight应用于我的每个 Imagemodel 实例,但这些返回错误。

然后我试图从这篇文章中获得灵感:https : //github.com/thoughtbot/paperclip/wiki/Extracting-image-dimensions

并在控制台中使用以下内容播放了一下:

image = Imagemodel.first
geometry = Paperclip::Geometry.from_file(image)
Run Code Online (Sandbox Code Playgroud)

虽然我在控制台中收到以下错误

Paperclip::Errors::NotIdentifiedByImageMagickError: 
Run Code Online (Sandbox Code Playgroud)

所以我有点困惑......我很高兴为我的表中的特定字段添加高度和宽度(而是在控制器中的创建操作中而不是在模型级别)或直接访问我的视图或控制器中的维度.. .

ruby-on-rails imagemagick paperclip

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

两个字母和最多13个数字的正则表达式错误地接受其他字母

我正在尝试为遵循此规则的模型字段构建正则表达式:

  • 以两个字母开头
  • 可以填充数字,最多13位数

有效示例:

  • US333
  • FR52389000

示例无效:

  • 11111
  • T11

我以为我找到了正确的正则表达式:

/[a-zA-Z][a-zA-Z]\d*/
Run Code Online (Sandbox Code Playgroud)

但是使用http://rubular.com/进行的测试证明似乎有效RR444kjj

有人可以指出错误吗?

ruby regex

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

具有多个设计模型的可操作身份验证

我目前正在实现我的两个设计模型之间的聊天。ClientProfessionnel。目前它工作得很好,但我只有一个频道:每个客户或专业人士都会收到来自所有客户和所有专业人士的所有消息。显示很好,但是观看他们的 AJAX 流程的人可以看到每条不适合他们的私人消息。

根据此线程http://www.thegreatcodeadventure.com/rails-5-action-cable-with-multiple-chatroom-subscriptions/这称为单一责任原则

所以我试图创建“子流”以便向正确的用户广播。

我的第一步是使用 Devise 进行身份验证。我正在使用经典:

module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_user

    def connect
        self.current_user = find_verified_user
        logger.add_tags 'ActionCable', current_user.email       
    end

    protected

    def find_verified_user
        if verified_user = env['warden'].user
          verified_user
        else
          reject_unauthorized_connection
        end
    end

  end
end
Run Code Online (Sandbox Code Playgroud)

这就是问题出现的地方:当客户端登录时,Actioncable 没有创建连接:

Started GET "/cable" for 127.0.0.1 at 2018-04-16 22:30:28 +0200
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2018-04-16 22:30:28 +0200
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: keep-alive, Upgrade, HTTP_UPGRADE: websocket)
An unauthorized …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise ruby-on-rails-5 actioncable

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

Rails错误:"未知密钥::依赖"

将表单保存到数据库时,我收到以下错误消息:未知密钥::依赖

我不知道为什么

有问题的模型我试图将数据保存到称为博物馆.这个模型被称为另一个名为展览的模型.

以下是两种型号:

class Museum < ActiveRecord::Base
  has_many :exhibitions, dependant: :destroy
end
Run Code Online (Sandbox Code Playgroud)

和展览模型

class Exhibition < ActiveRecord::Base
  belongs_to :museum
end
Run Code Online (Sandbox Code Playgroud)

我的博物馆控制员

class MuseumsController < ApplicationController

def show
  @museum = Museum.find(params[:id])
  @museum.address = @museum.streetnumber + " " +    @museum.streetnumbercomplement + " " + @museum.street + " " + @museum.adresscomplement + "," + @museum.postalcode + " " + @museum.city + " " + @museum.citycomplement
end

def new
end

def create
  @museum = Museum.new(museum_params)
  @museum.save
  redirect_to @museum
end

private

def museum_params
  params.require(:museum). …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

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