Ruby on rails Can';t在我的Rails3项目中不包括SendGrid

Ruby on rails Can';t在我的Rails3项目中不包括SendGrid,ruby-on-rails,include,gem,sendgrid,Ruby On Rails,Include,Gem,Sendgrid,我对ruby和rails非常陌生(3天,而且还在计算),所以我的问题可能是一些愚蠢的事情。然而,这似乎是一件愚蠢的事情,无法通过在线搜索答案来解决( 我正在按照以下指南创建一个简单的博客应用:。它工作正常,没有问题 然后我建立了SendGrid,我也可以通过它发送电子邮件 现在,我正在尝试使用此sendgrid gem:。我使用“gem install sendgrid”安装了它,它似乎可以正常工作 根据github上的说明,我只需要在我的邮件类中添加“include SendGrid”,就可以

我对ruby和rails非常陌生(3天,而且还在计算),所以我的问题可能是一些愚蠢的事情。然而,这似乎是一件愚蠢的事情,无法通过在线搜索答案来解决(

我正在按照以下指南创建一个简单的博客应用:。它工作正常,没有问题

然后我建立了SendGrid,我也可以通过它发送电子邮件

现在,我正在尝试使用此sendgrid gem:。我使用“gem install sendgrid”安装了它,它似乎可以正常工作

根据github上的说明,我只需要在我的邮件类中添加“include SendGrid”,就可以了。我只是这样做了:

class Emailer < ActionMailer::Base
    include SendGrid
    ...
end
class-Emailer
但是当我运行这个应用程序时,我得到了这个错误:未初始化的常量Emailer::SendGrid

根据到目前为止我所读的内容,我做了一些似乎有意义的其他事情:

  • 在我的Gemfile中添加了“gem sendgrid”。这在我的Gemfile.lock中添加了三行:
    • sendgrid(1.0.1)
    • json
    • json
  • 在my environment.rb文件中添加了“require sendgrid”
但是,错误仍然存在。一件可能表明问题的事情是,当我查看$LOAD_路径时,它没有sendgrid目录。为了进行比较,以相同方式包含的另一个gem是sqlite3,我在那里看到了“../sqlite3-1.3.4/lib”路径,但我没有看到“../sendgrid-1.0.1/lib”

有人能看出这次是什么样的愚蠢折磨着我吗

编辑:

我发现了一些非常有趣的事情。至少对我来说……如果我进入rails控制台,事情实际上似乎运行良好。以下是我的会话输出:

ruby-1.9.2-p290 :006 > include SendGrid
 => Object 
ruby-1.9.2-p290 :007 > sendgrid_category :use_subject_lines
 => :use_subject_lines 
ruby-1.9.2-p290 :008 > sendgrid_category "Welcome"
 => "Welcome" 
ruby-1.9.2-p290 :009 > p = Post.new(:title => "A new post", :content => "With garbage text")
 => #<Post id: nil, name: nil, title: "A new post", content: "With garbage text", created_at: nil, updated_at: nil> 
ruby-1.9.2-p290 :010 > Emailer.send_email("nick@sidebark.com", p).deliver
 => #<Mail::Message:2194904560, Multipart: false, Headers: <Date: Thu, 22 Sep 2011 16:52:41 -0700>, <From: ... blah, bah, blah...>>
ruby-1.9.2-p290:006>包含SendGrid
=>对象
ruby-1.9.2-p290:007>发送网格类别:使用主题行
=>:使用主题行
ruby-1.9.2-p290:008>sendgrid_类别“欢迎”
=>“欢迎”
ruby-1.9.2-p290:009>p=Post.new(:title=>“一篇新文章”,:content=>“带有垃圾文本”)
=> # 
ruby-1.9.2-p290:010>Emailer.send_email(“nick@sidebark.com,p)交付
=> #
邮件被发送,类别被SendGrid注册(我可以在统计页面上看到)

所以,最大的问题是:为什么我的应用程序只允许我在控制台上运行命令时包含SendGrid?在环境等方面有什么区别


还要注意的是,电子邮件是从控制台发送的,而不是从应用程序流发送的,尽管development.log说在这两种情况下都发送了电子邮件…

对于没有阅读原始帖子评论的人来说,答案是,一旦更改依赖项或配置,服务器需要重新启动f你的应用程序


至于在控制台中工作的原因,每次加载Rails控制台时,都会重新加载整个应用程序,包括新的依赖项和配置文件。

所以……我想我找到了答案……我完全忘记了我在按照说明启动Rails服务器的时候是在什么地方启动的。我重新启动了它在某种程度上,在调试模式下运行它,之后一切都很好-SendGrid注册了类别,电子邮件也发送得很好。不过,我仍然不太清楚服务器和我正在修改的代码之间的依赖关系。需要深入挖掘。现在我已经使用rails一段时间了,我明白了问题是什么:服务er需要重新启动以重新加载配置目录中的更改。控制台中的操作对我来说很有效,因为每次我启动它时它都会加载所有内容。这似乎是合乎逻辑的,但可能会让新手感到困惑。希望这对其他人有所帮助…我建议你将此作为对自己问题的回答,因为它将在其他人搜索时有所帮助对于类似的问题。