Ruby on rails 在Rails 4中使用gmail gem
我试图将nu7hatch/gmail gem与rails一起使用,但遇到了一些问题。为了排除与我的应用程序的其他部分发生冲突,我以绝对最少的代码启动了一个新的c9.io实例,但仍然遇到同样的问题。我将基本Rails脚手架更改如下: 档案(新增): routes.rb(新增): 欢迎光临_controller.rb:Ruby on rails 在Rails 4中使用gmail gem,ruby-on-rails,ruby-on-rails-4,rubygems,gmail,Ruby On Rails,Ruby On Rails 4,Rubygems,Gmail,我试图将nu7hatch/gmail gem与rails一起使用,但遇到了一些问题。为了排除与我的应用程序的其他部分发生冲突,我以绝对最少的代码启动了一个新的c9.io实例,但仍然遇到同样的问题。我将基本Rails脚手架更改如下: 档案(新增): routes.rb(新增): 欢迎光临_controller.rb: class WelcomeController < ApplicationController def index Gmail.connect("username"
class WelcomeController < ApplicationController
def index
Gmail.connect("username", "password") do |gmail|
@emails=gmail.inbox.find(:unread)
end
end
end
class WelcomeController
index.html.erb(视图):
当我访问应用程序的根目录时,出现以下错误:
无法加载这样的文件--mime/message
Rails告诉我此错误与以下行有关:
@emails=gmail.inbox.find(:未读)
有人知道我该如何做吗?我不确定你现在是否已经回答了这个问题,但我想我会补充我的发现。我认为正确的方法是像omniauth那样在config/initializer中设置一些东西。但是我只是将gem用于一个小的个人项目,所以我决定构建一个
gmail\u客户机
模型,并告诉控制器使用它
//gmail_client.rb
require 'active_model'
class GmailClient
include ActiveModel::Model
def build
Gmail.connect!('some_email', 'some_password')
end
end
我决定使用ActiveModel,因为我不希望这种东西存储在数据库中
然后在控制器中执行以下操作:
//some_controller
...
def index
gmail = GmailClient.new.build
@emails = gmail.inbox.find(:unread)
end
...
哦,这实际上需要一些重新装备。因为你每次都要打开一个连接,Gmail会在15次请求后阻塞。为了防止这种情况,您需要在请求之后添加
gmail.logout
。
<%= @emails.each do |email| %>
<p><%= email.subject %></p>
<% end %>
//gmail_client.rb
require 'active_model'
class GmailClient
include ActiveModel::Model
def build
Gmail.connect!('some_email', 'some_password')
end
end
//some_controller
...
def index
gmail = GmailClient.new.build
@emails = gmail.inbox.find(:unread)
end
...