2012-04-03 44 views
2

如果这个问题很简单,我是一个Ruby新手,非常抱歉。并且很多感谢您的帮助。让小马或邮件宝石与Sinatra/Heroku一起工作

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

我遇到的问题是,即使我在Heroku应用程序上安装了邮件宝石(通过添加到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' 

同样,当我尝试安装小马宝石,它抱怨说它无法加载邮件。奇怪的是,这是在我的本地系统上的所有作品,所以我认为这是Heroku的问题。我无法让Heroku从小马或邮件中完全加载所需的所有内容以成功启动。 (注意:我甚至无法启动Heroku,所以我甚至无法测试实际发送的电子邮件代码。)

任何特定的帮助/见解将不胜感激。有没有人用Heroku遇到过这个?有没有其他的宝石可以用于这个简单的目的?

谢谢!

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

+2

请问你能提供一些代码片段吗?特别是Gemfile和你至少需要宝石的地方。 – Swift 2012-04-03 17:59:38

+0

如果一切工作在本地,它会让我觉得你没有在你的git仓库中包含Gemfile.lock。你能确认你做到了吗?如果没有,Heroku可能不会正确地安装所有的依赖关系,如果你只提供Heroku和你的Gemfile。实际上,您可以通过部署到Heroku并查看重用或安装的Gem列表来查看所有已安装的Gem的列表。该列表应该与您系统上的内容相匹配。 – danielricecodes 2014-07-08 14:42:51

回答

7

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

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

。在你想要小马,而不是邮件一些设置情况下(他们很相似):

configure :production do # I have a different hash for development settings. 
    email_options, {  
    :from => "[email protected]", 
    :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与哈希传递“到”和“体”等等(我敢肯定你知道这一点,但我只是想彻底!)

我也使用v1.4,但没有同样的问题,但如果它说它不能加载邮件,当你切换到小马我会检查流氓require声明。