让Pony或Mail宝石与Sinatra / Heroku一起工作

时间:2012-04-03 16:53:52

标签: ruby heroku sinatra sendgrid pony

我是一个Ruby新手,如果这个问题很简单,请道歉。非常感谢您的帮助。

我们有一个部署在Heroku上的Sinatra应用程序。我们正在尝试添加一个发送简单电子邮件的页面。我已将SendGrid插件添加到Heroku应用程序中。现在,我只是尝试添加使用SendGrid SMTP服务器信息创建和发送消息的Ruby代码。

我遇到的问题是,即使我在Heroku应用程序上安装了Mail gem(通过添加到Gemfile),但是当Heroku应用程序启动抱怨未安装'treetop / runtime'时出现错误:

←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m /app/.bundle/gems/ruby/1.9.1/gems/mail-2.4.4/lib/mail.rb:75:in `require': no such file to load -- treetop/runtime (LoadError)
←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m  from /app/.bundle/gems/ruby/1.9.1/gems/mail-2.4.4/lib/mail.rb:75:in `rescue in block in <module:Mail>'
←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m  from /app/.bundle/gems/ruby/1.9.1/gems/mail-2.4.4/lib/mail.rb:69:in `block in <module:Mail>'
←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m  from /app/.bundle/gems/ruby/1.9.1/gems/mail-2.4.4/lib/mail.rb:68:in `each'
←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m  from /app/.bundle/gems/ruby/1.9.1/gems/mail-2.4.4/lib/mail.rb:68:in `<module:Mail>'
←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m  from /app/.bundle/gems/ruby/1.9.1/gems/mail-2.4.4/lib/mail.rb:2:in `<top (required)>'
←[32m2012-04-03T16:37:49+00:00 app[web.1]:←[0m  from /usr/ruby1.9.2/lib/ruby/gems/1.9.1/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'

同样,当我尝试安装Pony gem时,它会抱怨它无法加载Mail。奇怪的是,这一切都适用于我的本地系统,所以我认为这是Heroku的一个问题。我无法让Heroku从Pony或Mail中完全加载所需的一切,以便成功启动。 (注意:我甚至无法启动Heroku,因此我甚至无法测试实际发送的电子邮件代码。)

非常感谢任何具体的帮助/见解。 Heroku有没有遇到过这个?还有其他宝石可以用于这个简单的目的吗?

谢谢!

P.S。捆绑包成功安装了邮件(2.4.4)和小马(1.4)。

2 个答案:

答案 0 :(得分:7)

查看主路由ruby脚本的代码段会很有帮助。但对于我的sinatra应用程序,我将Mail配置配置为。

Mail.defaults do
  delivery_method :smtp, {
    :address => 'smtp.sendgrid.net',
    :port => 587,
    :domain => 'heroku.com',
    :user_name => ENV['SENDGRID_USERNAME'],
    :password => ENV['SENDGRID_PASSWORD'],
    :authentication => 'plain',
    :enable_starttls_auto => true
  }
end

在我发送联系电子邮件

mail = Mail.deliver do
    to <youremail>
    from <someone>
    subject 'Feedback for my Sintra app'
    text_part do
        body <your feedback>
    end
end

希望这有帮助。

答案 1 :(得分:1)

如果你想要一些Pony而不是Mail的设置(它们非常相似):

configure :production do # I have a different hash for development settings.
  email_options, {      
    :from => "noreply@midas.heroku.com",
    :via => :smtp,
    :via_options => {
      :address => 'smtp.sendgrid.net',
      :port => '587',
      :domain => 'heroku.com',
      :user_name => ENV['SENDGRID_USERNAME'],
      :password => ENV['SENDGRID_PASSWORD'],
      :authentication => :plain,
      :enable_starttls_auto => true
    },
  }
end

Pony.options = settings.email_options

确保您已通过配置设置设置了sendgrid用户名和密码,例如

heroku config:add SENDGRID_USERNAME=GIVEN_USERNAME SENDGRID_PASSWORD=GIVEN_PASSWORD

要发送非常简单,只需拨打Pony.mail并将其传递给'to'和'body'等哈希(我相信你知道这一点但我只是想彻底!)

我也使用v1.4,但没有遇到同样的问题,但如果它说你在切换到Pony时无法加载Mail我会检查一个流氓require声明。< / p>