2

私は Ruby の初心者なので、この質問が単純である場合は申し訳ありません。そして、あなたの助けを前もって感謝します。

Heroku にデプロイされた Sinatra アプリケーションがあります。簡単な電子メールを送信するページを追加しようとしています。Heroku アプリに SendGrid アドオンを追加しました。ここで、SendGrid SMTP サーバー情報を使用してメッセージを作成および送信する Ruby コードを追加しようとしています。

私が抱えている問題は、(Gemfile に追加することによって) Heroku アプリに Mail gem をインストールしたにもかかわらず、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 でこれに遭遇した人はいますか? この単純な目的のために機能する可能性のある他の宝石はありますか?

ありがとう!

PS バンドルはメール (2.4.4) とポニー (1.4) を正常にインストールしました。

4

2 に答える 2

8

プライマリ ルーティング 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

お役に立てれば。

于 2012-06-07T13:17:21.420 に答える
1

Mail の代わりに Pony の設定が必要な場合 (非常に似ています):

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 に切り替えたときにメールを読み込めないというメッセージが表示された場合は、不正なrequireステートメントがないかどうかを確認します。

于 2012-07-10T01:19:08.827 に答える