【问题标题】:Can't include SendGrid in my Rails3 project不能在我的 Rails3 项目中包含 SendGrid
【发布时间】:2011-11-23 05:58:23
【问题描述】:

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

我正在按照本指南创建一个简单的博客应用程序:http://guides.rubyonrails.org/getting_started.html。它工作正常,没有问题。

然后我设置了 SendGrid,我也可以通过它发送电子邮件。

现在,我正在尝试使用这个 sendgrid gem:https://github.com/stephenb/sendgrid。我使用“gem install sendgrid”安装它,它似乎没有问题。

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

class Emailer < ActionMailer::Base
    include SendGrid
    ...
end

但是当我运行应用程序时,我收到了这个错误:未初始化的常量 Emailer::SendGrid

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

  • 在我的 Gemfile 中添加了“gem sendgrid”。这在我的 Gemfile.lock 中添加了三行:
    • sendgrid (1.0.1)
    • json
    • json
  • 在我的 environment.rb 文件中添加了“需要 sendgrid”。

然而,错误仍然存​​在。可能表明存在问题的一件事是,当我查看 $LOAD_PATH 时,它没有 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...>>

电子邮件已发送并且类别已由 SendGrid 注册(我可以在统计页面上看到它)。

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

另请注意,电子邮件是从控制台发送的,而不是从应用程序流发送的,即使 development.log 说在这两种情况下都发送了电子邮件...

【问题讨论】:

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

标签: ruby-on-rails include gem sendgrid


【解决方案1】:

对于没有阅读原帖中的 cmets 的任何人,答案是,一旦您更改了应用程序的依赖项或配置,就需要重新启动服务器。

就控制台运行的原因而言,每次加载 Rails 控制台时,都会重新加载整个应用程序,包括新的依赖项和配置文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2013-11-06
    • 2014-11-19
    • 2017-03-08
    • 2012-04-07
    • 2019-11-29
    • 2013-03-05
    相关资源
    最近更新 更多