ruby-on-rails - 设计 Invitable 的 Resque 作业失败 - 未定义的方法 `invitation_instructions' 用于#
Ruby on Rails 项目,我正在运行 Resque 来处理电子邮件(特别是 Devise 和 Devise Invitable)。设计电子邮件发送良好(通过 API 通过邮戳 gem 发送)但 devise_invitable 电子邮件在 Resque 中失败,带有undefined me
问题描述
Ruby on Rails 项目,我正在运行 Resque 来处理电子邮件(特别是 Devise 和 Devise Invitable)。设计电子邮件发送良好(通过 API 通过邮戳 gem 发送)但 devise_invitable 电子邮件在 Resque 中失败,带有undefined method invitation_instructions for #User:0x0xxxxxx Did you mean? invitations_count
.
通过默认设计邮件发送时,一切正常,但我的自定义邮件失败。我想添加一个内联附件,因此需要一个自定义邮件。
自定义设计邮件:
class DeviseMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
include Devise::Mailers::Helpers
include DeviseInvitable::Mailer
default template_path: 'devise/mailer'
default from: sender@example.com
layout 'mailer_devise'
before_action :add_inline_attachment!
def reset_password_instructions(record, token, opts={})
super
end
def invitation_instructions(record, token, opts={})
@token = token
devise_mail(record)#, record.invitation_instructions || :invitation_instructions, opts)
end
private
def add_inline_attachment!
attachments.inline['logo.png'] = File.read(Rails.root.join('app/assets/images/logo.png'))
end
end
概括:
def reset_password_instructions
- 工作正常
def invitation_instructions
- 因未定义的方法错误而失败
从您获得令牌的服务中,您可以创建一个在设置令牌时发出的主题。
export class AccessTokenService {
private readonly accessToken = new Subject<string>();
readonly accessToken$ = accessToken.asObservable();
constructor() {
// your logic to get token:
this.getTokenFromSomewhere().subscribe(() => {
const token = localStorage.setItem('accessToken');
this.accessToken.next(token);
});
}
}
export class CustomHttpInterceptor implements HttpInterceptor {
constructor(readonly at: AccessTokenService) {}
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.at.accessToken$.pipe(
mergeMap((token) => {
const request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
return next.handle(request);
})
);
}
}
您还可以在APP_INITIALIZER
加载其他任何内容之前使用 设置 localStorage 项。但这取决于您的用例是否现在有用
解决方案
由于其他原因,我最终迁移到 Sidekiq。下面是我更新的 Devise Mailer 类,它运行良好。没有必要定义invitation_instructions
方法,因为before_action
回调附加了内联图像,我一开始想要的是什么。
class DeviseMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
include Devise::Mailers::Helpers
include DeviseInvitable::Mailer
default template_path: 'devise/mailer'
default from: ENV['EMAIL_NAME']
layout 'mailer_devise'
before_action :add_inline_attachment!
private
def add_inline_attachment!
attachments.inline['logo.png'] = File.read(Rails.root.join('app/assets/images/logo.png'))
end
end
推荐阅读
- html - 如何在目标 JSP 页面上显示 html 表
- javascript - 网格中的可见值行
- ruby - 返回布尔值而不是值,重新创建 .select 方法
- c# - 我不能同时用操纵杆移动和射击
- kendo-ui - 剑道树视图和树下拉列表 - 当前选择和同步更改
- java - 如何从我的域中检索所有邮件收件箱内容
- codeigniter - 提交后选择的下拉菜单总是改变
- android - 如何用 Fragment Scenario 测试 Fragment?
- elasticsearch - 在elasticsearch中搜索嵌套文档中除以or子句的多个字段
- sql - 如何查看 db2 服务器中最近更新的表?
Ruby on Rails 项目,我正在运行 Resque 来处理电子邮件(特别是 Devise 和 Devise Invitable)。设计电子邮件发送良好(通过 API 通过邮戳 gem 发送)但 devise_invitable 电子邮件在 Resque 中失败,带有undefined me
问题描述
Ruby on Rails 项目,我正在运行 Resque 来处理电子邮件(特别是 Devise 和 Devise Invitable)。设计电子邮件发送良好(通过 API 通过邮戳 gem 发送)但 devise_invitable 电子邮件在 Resque 中失败,带有undefined method invitation_instructions for #User:0x0xxxxxx Did you mean? invitations_count
.
通过默认设计邮件发送时,一切正常,但我的自定义邮件失败。我想添加一个内联附件,因此需要一个自定义邮件。
自定义设计邮件:
class DeviseMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
include Devise::Mailers::Helpers
include DeviseInvitable::Mailer
default template_path: 'devise/mailer'
default from: sender@example.com
layout 'mailer_devise'
before_action :add_inline_attachment!
def reset_password_instructions(record, token, opts={})
super
end
def invitation_instructions(record, token, opts={})
@token = token
devise_mail(record)#, record.invitation_instructions || :invitation_instructions, opts)
end
private
def add_inline_attachment!
attachments.inline['logo.png'] = File.read(Rails.root.join('app/assets/images/logo.png'))
end
end
概括:
def reset_password_instructions
- 工作正常
def invitation_instructions
- 因未定义的方法错误而失败
从您获得令牌的服务中,您可以创建一个在设置令牌时发出的主题。
export class AccessTokenService {
private readonly accessToken = new Subject<string>();
readonly accessToken$ = accessToken.asObservable();
constructor() {
// your logic to get token:
this.getTokenFromSomewhere().subscribe(() => {
const token = localStorage.setItem('accessToken');
this.accessToken.next(token);
});
}
}
export class CustomHttpInterceptor implements HttpInterceptor {
constructor(readonly at: AccessTokenService) {}
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.at.accessToken$.pipe(
mergeMap((token) => {
const request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}
});
return next.handle(request);
})
);
}
}
您还可以在APP_INITIALIZER
加载其他任何内容之前使用 设置 localStorage 项。但这取决于您的用例是否现在有用
解决方案
由于其他原因,我最终迁移到 Sidekiq。下面是我更新的 Devise Mailer 类,它运行良好。没有必要定义invitation_instructions
方法,因为before_action
回调附加了内联图像,我一开始想要的是什么。
class DeviseMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
include Devise::Mailers::Helpers
include DeviseInvitable::Mailer
default template_path: 'devise/mailer'
default from: ENV['EMAIL_NAME']
layout 'mailer_devise'
before_action :add_inline_attachment!
private
def add_inline_attachment!
attachments.inline['logo.png'] = File.read(Rails.root.join('app/assets/images/logo.png'))
end
end
推荐阅读
- html - 如何在目标 JSP 页面上显示 html 表
- javascript - 网格中的可见值行
- ruby - 返回布尔值而不是值,重新创建 .select 方法
- c# - 我不能同时用操纵杆移动和射击
- kendo-ui - 剑道树视图和树下拉列表 - 当前选择和同步更改
- java - 如何从我的域中检索所有邮件收件箱内容
- codeigniter - 提交后选择的下拉菜单总是改变
- android - 如何用 Fragment Scenario 测试 Fragment?
- elasticsearch - 在elasticsearch中搜索嵌套文档中除以or子句的多个字段
- sql - 如何查看 db2 服务器中最近更新的表?