3

herokuにデプロイされた本番環境でのみ発生する問題があります。

Herokuのログには次のように書かれています。

[...]
Parameters: {"utf8"=>"✓",
             "authenticity_token"=>"...", 
             "users"=>{"name"=>"name", "email"=>"example@example.com", 
             "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"},
             "commit"=>"Join Us!"}

Processing by UsersController#create as HTML
Rendered notifier/new_user_creation.html.erb (0.7ms)
heroku[router]: POST stark-blabla-345.herokuapp.com/users dyno=web.1 queue=0 wait=0ms
service=333ms status=500 bytes=643
Completed 500 Internal Server Error in 284ms
app[web.1]: Errno::ENOENT (No such file or directory - /assets/):***   
app[web.1]: app/controllers/users_controller.rb:13:in `create

このエラーは、次の特性を持つメーラーコンポーネントを追加した後に発生しました。

class Notifier < ActionMailer::Base
  default from: "..."

  def new_user_creation(user)
    @user = user
    @url= "http://stark-blabla-345.herokuapp.com/users/
                  #{user.create_digitally_signed_remember_token}/confirm"
    mail to:user.email, subject: 'bla bla, complete the registration process'   

  end

end

次のtempletenew_user_creation.html.erbを使用します。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title><%=t("confirm_account_creation")%></title>
      <style type="text/css">
          body{ background:#f1f1ee; }
         .title{font-size: 300%; font-family: Georgia, serif; font-weight:bold;}  
         .indented{margin-left:5%; padding:1%;}
      </style>
  </head>

<body>
  <table width="100%" id="background" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td>
        <img src="http://stark-blabla-345.herokuapp.com/assets/
          red_flower-a4105a7cc626711e8789b1c2b21777b6.png"
          align="middle">
        <span class="title"><%=t("base_title")%></span>
      </td>
   </tr>  

   <tr>
     <td>
       <p class="indented"><%=t("confirm_account_creation")%><p>
       <p class="indented"><a href="<%=@url%>">COMPLETE ACCOUNT CREATION PROCESS</a></p>
     </td>
   </tr>


  </table>  

</body>

</html>

UsersController#create():

def create
  @user = User.new(params[:users])
  if @user.save 
    Notifier.new_user_creation(@user).deliver
    flash.now[:block] = t("users.create.created")
    render "confirm_registration"    
  else
    render 'new'
  end     
end

私のGemfile:

source 'https://rubygems.org'
ruby '1.9.3'
gem 'rails', '3.2.6'
gem "heroku"
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'bootstrap-sass'
gem 'jquery-rails'
gem "paperclip", "2.7.0" # :git => "git://github.com/thoughtbot/paperclip.git"
gem 'bcrypt-ruby', '3.0.1'
gem 'nokogiri'
gem 'premailer-rails3'  

group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'
  gem 'uglifier', '>= 1.0.3'
end

group :test,:development do
  gem 'sqlite3'
  gem 'rspec-rails','2.9.0'
  gem 'execjs'
  gem 'annotate', '~> 2.4.1.beta'
end

group :test do
  gem 'spork' 
  gem 'cucumber-rails', require:false;
  gem 'capybara'
  gem 'database_cleaner'
  gem 'factory_girl'
  gem "launchy"
end

group :production do
  gem 'pg'
  gem 'thin'
end

Production.rbの興味深い部分:

MyApp::Application.configure do
  config.action_mailer.default_url_options = 
     { host: "stark-blabla-345.herokuapp.com" }
  config.action_mailer.raise_delivery_errors = false # the same with true 
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.default :charset => "utf-8"

  config.action_mailer.smtp_settings = {
    address: "smtp.gmail.com",
    port: 587,
    domain: "stark-blabla-345.herokuapp.com",
    authentication: "plain",
    enable_starttls_auto: true,
    user_name: ENV["GMAIL_USERNAME"],
    password:  ENV["GMAIL_PASSWORD"]
  }

end
4

3 に答える 3

3

これはherokuだけの問題ではありません。この例外は、email.css存在しない場合、または(premailer-rails 1.3.xの時点で)インラインstyleタグが存在しない場合にスローされます。

解決策は、アセットフォルダーに追加するか、電子メールHTMLにemail.css空を追加することです。<style type="text/css"> </style>

于 2012-07-23T18:07:07.047 に答える
3

何時間もこれに苦労していて、あなたの利益のために私の解決策を追加すると思いました。

premailer-rails3の使用(1.3.1)

メールのCSSをブートストラップのスタイルに一致させたかったので、単純に使用するのが面倒だと思いましたが、<%= stylesheet_link_tag "application", :media => "all" %>これにより/assets/が見つからないという問題が発生します。

だから私は次のことをすることになった:

  1. *= require_tree私から削除する必要がapplication.cssあります。これはとにかく良い習慣であり、メインのcssファイルで必要です。
*= require_self
*= require <MyMainSiteCSS>
*/
  1. app/stylesheets/email.css以下で作成
@import "bootstrap";
@import "bootstrap-responsive";
  1. メールビューの先頭を次のように変更しました。
<head>
  <link href="email.css" media="all" rel="stylesheet" type="text/css">
</head>

これで、すべてが機能し、メールに優れたブートストラップスタイルが追加されました。

于 2012-12-05T13:22:05.200 に答える
0

premailer-rails3宝石を使用していますか?バージョン1.2.0でもまったく同じ問題が発生することがわかりました。1.1.0にダウングレードすると修正されました。お役に立てば幸いです。

于 2012-06-22T20:53:24.870 に答える