我对Ruby和Rails非常陌生(仅三天),所以我的问题可能很愚蠢。但是,这个问题似乎是一些在线答案无法解决的愚蠢问题。:(
我正在按照此指南创建一个简单的博客应用程序:http://guides.rubyonrails.org/getting_started.html。它运行良好,没有问题。
然后我设置了SendGrid,我也能够通过它发送电子邮件。
现在,我正在尝试使用这个sendgrid gem:https://github.com/stephenb/sendgrid。我使用'gem install sendgrid'安装了它,看起来没有问题。
根据GitHub上的说明,我只需要在我的邮件类中添加“include SendGrid”,就可以运行了。我已经这样做了:
但是当我运行应用程序时,出现了这个错误:未初始化常量Emailer :: SendGrid。
根据我目前阅读的内容,我做了几件其他看起来很有道理的事情:
- 在我的Gemfile中添加了“gem sendgrid”。这会在我的Gemfile.lock中添加三行: - sendgrid(1.0.1) - json - json
- 在我的environment.rb文件中添加了“require sendgrid”。
然而,错误仍然存在。可能表明问题的一件事是,当我查看$LOAD_PATH时,它没有sendgrid目录。作为比较,以相同方式包含的另一个gem是sqlite3,我在那里看到“... /sqlite3-1.3.4 / lib”路径,但是我没有看到“… /sendgrid-1.0.1 / lib”。
有人能分辨出我这次遭受了何种愚蠢吗?
编辑:
我发现了一些非常有趣的东西。至少对我来说......如果我进入rails控制台,事情似乎确实可以正常工作。这是我的会话输出:
我正在按照此指南创建一个简单的博客应用程序: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文件中添加了“require 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?环境之间有什么区别等等?
还请注意,虽然开发日志中在两种情况下都显示已发送电子邮件,但电子邮件仅从控制台发送,而不是从应用程序流程中发送...