【问题标题】:Getting Pony or Mail gems to work with Sinatra / Heroku让 Pony 或 Mail gem 与 Sinatra / Heroku 一起工作
【发布时间】:2012-04-03 16:53:52
【问题描述】:

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

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

我遇到的问题是,即使我在 Heroku 应用程序上安装了 Mail gem(通过添加到 Gemfile),当 Heroku 应用程序启动时我收到一个错误,抱怨“树顶/运行时”没有安装:

←[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 遇到过这种情况吗?是否有其他宝石可以用于这个简单的目的?

谢谢!

附:该捆绑包成功安装了 mail (2.4.4) 和 pony (1.4)。

【问题讨论】:

  • 你能提供一些代码sn-ps吗?特别是 Gemfile 以及您至少需要 gem 的位置。
  • 如果一切都在本地运行,这让我觉得你没有将 Gemfile.lock 包含在你的 git 存储库中。你能确认你已经这样做了吗?如果没有,如果您只为 Heroku 提供了 Gemfile,则 Heroku 可能无法正确安装所有依赖项。事实上,您可以通过部署到 Heroku 并查看重用或已安装 gem 的列表来查看所有已安装 Gem 的列表。该列表应该与您系统上的列表相匹配。

标签: ruby heroku sinatra sendgrid pony


【解决方案1】:

查看主要路由 ruby​​ 脚本的代码 sn-ps 会很有帮助。但是对于我的 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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    如果您想要 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 语句。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多