Pracując nad mailingiem w pewnej aplikacji napisanej w Padrino natrafiłem na "głupi" błąd:
NoMethodError: undefined method `default_encoding' for Mail::Message:Class
Z takim oto stacktracem:
NoMethodError: undefined method `default_encoding' for Mail::Message:Class /gems/sinatra-1.1.3/lib/sinatra/base.rb:466:in `render' /gems/padrino-core-0.9.19/lib/padrino-core/application/rendering.rb:123:in `render' /gems/padrino-mailer-0.9.19/lib/padrino-mailer/ext.rb:228:in `render' /home/mencio/app/mailers/signup_mailer.rb:9 /gems/padrino-mailer-0.9.19/lib/padrino-mailer/base.rb:57:in `instance_exec' /gems/padrino-mailer-0.9.19/lib/padrino-mailer/base.rb:57:in `email' /gems/padrino-mailer-0.9.19/lib/padrino-mailer/helpers.rb:82:in `call' /gems/padrino-mailer-0.9.19/lib/padrino-mailer/helpers.rb:82:in `deliver' /gems/padrino-mailer-0.9.19/lib/padrino-mailer/helpers.rb:34:in `deliver' /home/mencio/app/controllers/signups.rb:9:in `POST /signup' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:340:in `call' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:340:in `route' /gems/sinatra-1.1.3/lib/sinatra/base.rb:649:in `instance_eval' /gems/sinatra-1.1.3/lib/sinatra/base.rb:649:in `route_eval' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:605:in `route!' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:605:in `catch' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:605:in `route!' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:596:in `catch' /gems/padrino-core-0.9.19/lib/padrino-core/application/routing.rb:596:in `route!' /gems/sinatra-1.1.3/lib/sinatra/base.rb:766:in `dispatch!' /gems/sinatra-1.1.3/lib/sinatra/base.rb:559:in `call!' /gems/sinatra-1.1.3/lib/sinatra/base.rb:731:in `instance_eval' /gems/sinatra-1.1.3/lib/sinatra/base.rb:731:in `invoke' /gems/sinatra-1.1.3/lib/sinatra/base.rb:731:in `catch' /gems/sinatra-1.1.3/lib/sinatra/base.rb:731:in `invoke' /gems/sinatra-1.1.3/lib/sinatra/base.rb:559:in `call!' /gems/sinatra-1.1.3/lib/sinatra/base.rb:544:in `call' /gems/rack-flash-0.1.1/lib/rack/flash.rb:148:in `call' /gems/padrino-core-0.9.19/lib/padrino-core/reloader.rb:31:in `call' /gems/padrino-core-0.9.19/lib/padrino-core/logger.rb:282:in `call' /gems/warden-1.0.3/lib/warden/manager.rb:35:in `call' /gems/warden-1.0.3/lib/warden/manager.rb:34:in `catch' /gems/warden-1.0.3/lib/warden/manager.rb:34:in `call' /gems/rack-less-1.5.0/lib/rack/less/base.rb:40:in `call!' /gems/rack-less-1.5.0/lib/rack/less/base.rb:24:in `call' /gems/rack-1.2.1/lib/rack/showexceptions.rb:24:in `call' /gems/rack-1.2.1/lib/rack/methodoverride.rb:24:in `call' /gems/rack-1.2.1/lib/rack/session/cookie.rb:37:in `call' /gems/sinatra-1.1.3/lib/sinatra/base.rb:1173:in `call' /gems/sinatra-1.1.3/lib/sinatra/base.rb:1199:in `synchronize' /gems/sinatra-1.1.3/lib/sinatra/base.rb:1173:in `call' /gems/padrino-core-0.9.19/lib/padrino-core/router.rb:71:in `call' /gems/padrino-core-0.9.19/lib/padrino-core/router.rb:64:in `each' /gems/padrino-core-0.9.19/lib/padrino-core/router.rb:64:in `call' /gems/rack-1.2.1/lib/rack/content_length.rb:13:in `call' /gems/rack-1.2.1/lib/rack/chunked.rb:15:in `call' /gems/thin-1.2.8/lib/thin/connection.rb:84:in `pre_process' /gems/thin-1.2.8/lib/thin/connection.rb:82:in `catch' /gems/thin-1.2.8/lib/thin/connection.rb:82:in `pre_process' /gems/thin-1.2.8/lib/thin/connection.rb:57:in `process' /gems/thin-1.2.8/lib/thin/connection.rb:42:in `receive_data' /gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine' /gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run' /gems/thin-1.2.8/lib/thin/backends/base.rb:61:in `start' /gems/thin-1.2.8/lib/thin/server.rb:159:in `start' /gems/rack-1.2.1/lib/rack/handler/thin.rb:14:in `run' /gems/padrino-core-0.9.19/lib/padrino-core/server.rb:43:in `build' /gems/padrino-core-0.9.19/lib/padrino-core/server.rb:14:in `run!' /gems/padrino-core-0.9.19/lib/padrino-core/cli/adapter.rb:29:in `start' /gems/padrino-core-0.9.19/lib/padrino-core/cli/base.rb:23:in `start' /gems/thor-0.14.6/lib/thor/task.rb:22:in `send' /gems/thor-0.14.6/lib/thor/task.rb:22:in `run' /gems/thor-0.14.6/lib/thor/invocation.rb:118:in `invoke_task' /gems/thor-0.14.6/lib/thor.rb:263:in `dispatch' /gems/thor-0.14.6/lib/thor/base.rb:389:in `start' /gems/padrino-core-0.9.19/bin/padrino:8 /gems/bin/padrino:19:in `load' /gems/bin/padrino:19
Niestety nie znalazłem żadnej wartościowej informacji na temat tego jak to naprawić, tak więc napisałem (brzydki ;) ) workaround który dopisujemy w app/app.rb:
module Mail class Message def self.default_encoding end end end
Przynajmniej na "teraz" rozwiązanie to wydaje się działać.
May 31, 2011 — 10:14
To Twoj pierwszy projekt w padrino framework? Ja kiedys probowałem, ale się poddałem
May 31, 2011 — 10:24
Jedna z pierwszych i pierwsza większa. Padrino to dla mnie taka “obudowana” Sinatra, chociaż trzeba przyznać, że wiele mu jeszcze brakuje. Mimo to, do małych aplikacji gdzie WebUI jest tylko częścią projektu sprawdza się bardzo dobrze. Trzeba tylko czasem rozwiązać różne ciekawe problemy :)