gpt4 book ai didi

ruby-on-rails - 在 rails 4 的 lib 类中使用 url_helpers

转载 作者:行者123 更新时间:2023-12-04 05:53:40 25 4
gpt4 key购买 nike

在我的 Rails 应用程序中,一个 lib 类用于接收电子邮件。电子邮件接收者类解析电子邮件并使用 HTTP 响应将其发送到应用程序 Controller 。代码如下所示:

  uri = 'http://localhost:3000/incoming_mail'
body = {'from'=> from, 'to' => to, 'subject' => subject, 'message' => message}

response = Net::HTTP::post_form(URI.parse(uri), body)

问题是我不想指定完整的 URL。有什么方法可以使用 'incoming_mail_path' 而不是 'localhost:3000/incoming_mail' 吗?我试图添加:

include Rails.application.routes.url_helpers

但这不起作用并给出以下错误:

 <class:EmailReceiver>': uninitialized constant EmailReceiver::Rails (NameError)

任何人都可以为此提出解决方案。

我在这里发布整个类(class)(用包含语句更新了类(class)):

require 'mail'
require 'net/https'
require 'net/http'
require 'uri'




class EmailReceiver

include Rails.application.routes.url_helpers
attr_accessor :url
def initialize
end

def submit(content)
mail = Mail.read_from_string(content)
body = mail.body.decoded
from = mail.from.first
to = mail.to.first
subject = mail.subject


if mail.multipart?
part = mail.parts.select { |p| p.content_type =~ /text\/plain/ }.first rescue nil
unless part.nil?
message = part.body.decoded
end
else
message = mail.decoded
end

unless message.nil?

uri = incoming_mail_url
#uri = 'http://localhost:3000/incoming_mail'
body = {'from'=> from, 'to' => to, 'subject' => subject, 'message' => message}

response = Net::HTTP::post_form(URI.parse(uri), body)

end
end


end

handler = EmailReceiver.new
handler.submit(STDIN.read)

最佳答案

调试:

阅读您的评论后,我发现您正在将它作为甚至不识别 Rails 的 ruby​​ 脚本运行。

在弄清楚如何将所有要求包含到文件之前。我试图通过 rails 环境(当服务器已经在运行时)运行文件:

cat sample.email | bundle exec rails runner "eval(File.read 'lib/email_receiver.rb')"

我得到了 incoming_mail_url 的错误:

 Missing host to link to! Please provide the :host parameter, 
set default_url_options[:host], or set :only_path to true (ArgumentError)

虽然 incoming_mail_path 成功执行了 /incoming_mail(这不是您需要的)。


结论:

这意味着无论您做什么,只要您不从服务器运行文件(例如:初始化程序),主机就永远不会存在。

当您从服务器运行此模块时,它会通过您包含的 url_helpers 识别路由


替代建议:

Griddler gem 是一个 Rails 引擎,它为将传入电子邮件转换为 HTTP POST 请求的服务提供端点。它解析这些 POST 并将构建的电子邮件对象交给您实现的类。

关于ruby-on-rails - 在 rails 4 的 lib 类中使用 url_helpers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26733425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com