2012-04-03 3 views
2

저는 Ruby 초보자입니다.이 질문이 간단한 경우 사과드립니다. 그리고 당신의 도움에 미리 감사드립니다.Sinatra/Heroku와 함께 사용할 조랑말 또는 메일 보석 받기

우리는 Heroku에 배포 된 Sinatra 응용 프로그램을 보유하고 있습니다. 우리는 간단한 이메일을 보내는 페이지를 추가하려고합니다. Heroku 앱에 SendGrid 부가 기능을 추가했습니다. 이제 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 보석을 설치하려고하면 메일을로드 할 수 없다는 불만이 있습니다. 이상하게도 이것은 로컬 시스템의 모든 작업이므로 Heroku의 문제라고 생각합니다. 나는 Heroku가 포니 (pony) 또는 메일 (mail)에서 필요로하는 모든 것을 성공적으로로드 할 수는 없습니다. (참고 : Heroku를 출시 할 수 없기 때문에 이메일 코드를 실제로 테스트 할 수도 없습니다.)

특정 도움이나 통찰력을 주시면 감사하겠습니다. 헤로쿠와 만난 사람 있습니까? 이 단순한 목적을 위해 작동 할 수있는 다른 보석들이 있습니까?

감사합니다.

P. 번들이 메일 (2.4.4) 및 포니 (1.4)를 성공적으로 설치했습니다.

+2

일부 코드 조각을 제공해 주실 수 있습니까? 특히 Gemfile과 최소한 보석을 필요로하는 곳. – Swift

+0

모든 것이 로컬에서 작동하면 git 파일 저장소에 Gemfile.lock을 포함시키지 않은 것으로 생각됩니다. 이 일을했다는 것을 확인할 수 있습니까? 그렇지 않다면 Heroku가 Gemfile을 제공 한 경우에만 Heroku가 모든 의존성을 올바르게 설치하지 못할 수도 있습니다. 실제로, 당신은 Heroku에 배치하고 재사용되거나 설치된 보석의 목록을보고 설치된 모든 보석의 목록을 볼 수 있습니다. 이 목록은 시스템에있는 것과 일치해야합니다. – danielricecodes

답변

7

기본 라우팅 루비 스크립트의 코드 스 니펫을 보는 것이 도움이됩니다. 하지만 내 sinatra 애플 리케이션을 위해, 나는 Mail configs를 설정했다.

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를 사용했지만 동일한 문제가 없었지만 Pony로 전환했을 때 Mail을로드 할 수 없다는 메시지가 나오면 require 문구를 확인해야합니다.

관련 문제