简体   繁体   English

Ruby On Rails-生产中的动作邮件程序错误

[英]Ruby On Rails - Action Mailer Error In Production

I'm getting the error 我遇到了错误

Connection refused - connect(2) for "localhost" port 25 

when trying to send an email in production. 尝试在生产中发送电子邮件时。 Everything works fine in development mode. 在开发模式下一切正常。 I can also connect to my mail server via telnet on port 465 as well. 我也可以通过465端口上的telnet连接到我的邮件服务器。 I am also using the Devise gem which requires that I have 我也在使用Devise gem,这需要我具备

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

set in my development.rb file. 在我的development.rb文件中设置。 I don't know if this could be causing any issues or not. 我不知道这是否会引起任何问题。 I have removed it and tested again but still got the same error. 我已将其删除并再次测试,但仍然遇到相同的错误。

I've been working on this for hours so any help would be appreciated. 我已经为此工作了几个小时,所以我们将不胜感激。 Here are my files. 这是我的文件。

Here is my development.rb 这是我的development.rb

Rails.application.configure do
  # Settings specified here will take precedence over those in    config/application.rb.

  # In the development environment your application's code is reloaded on
  # every request. This slows down response time but is perfect for development
  # since you don't have to restart the web server when you make code changes.
  config.cache_classes = false

  # Do not eager load code on boot.
  config.eager_load = false

  # Show full error reports and disable caching.
  config.consider_all_requests_local       = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send.
  config.action_mailer.raise_delivery_errors = false

  #DEVISE WANTS THIS
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

  # Print deprecation notices to the Rails logger.
  config.active_support.deprecation = :log

  # Raise an error on page load if there are pending migrations.
  config.active_record.migration_error = :page_load

  # Debug mode disables concatenation and preprocessing of assets.
  # This option may cause significant delays in view rendering with a large
  # number of complex assets.
  config.assets.debug = true

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # Adds additional error checking when serving assets at runtime.
  # Checks for improperly declared sprockets dependencies.
  # Raises helpful error messages.
  config.assets.raise_runtime_errors = true

  # Raises error for missing translations
  # config.action_view.raise_on_missing_translations = true

  #Action Mailer
  config.action_mailer.perform_deliveries = true

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      address:              'p3plcpnl0334.prod.phx3.secureserver.net',
      port:                 465,
      domain:               'finaltouchsecurity.com',
      user_name:            'receipts@finaltouchsecurity.com',
      password:             'xxxxxxxxxx',
      authentication:       'plain',
      #enable_starttls_auto: true 
      ssl: true }

end

Here is my production.rb 这是我的production.rb

Rails.application.configure do
  # Settings specified here will take precedence over those in  config/application.rb.

  # Code is not reloaded between requests.
  config.cache_classes = true

  # Eager load code on boot. This eager loads most of Rails and
  # your application in memory, allowing both threaded web servers
  # and those relying on copy on write to perform better.
  # Rake tasks automatically ignore this option for performance.
  config.eager_load = true

  # Full error reports are disabled and caching is turned on.
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true

  # Enable Rack::Cache to put a simple HTTP cache in front of your application
  # Add `rack-cache` to your Gemfile before enabling this.
  # For large-scale production use, consider using a caching reverse proxy like
  # NGINX, varnish or squid.
  # config.action_dispatch.rack_cache = true

  # Disable serving static files from the `/public` folder by default since
  # Apache or NGINX already handles this.
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?

  # Compress JavaScripts and CSS.
  config.assets.js_compressor = :uglifier
  # config.assets.css_compressor = :sass

  # Do not fallback to assets pipeline if a precompiled asset is missed.
  config.assets.compile = false

  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
  # yet still be able to expire them through the digest params.
  config.assets.digest = true

  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb

  # Specifies the header that your server uses for sending files.
  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  # Use the lowest log level to ensure availability of diagnostic information
  # when problems arise.
  config.log_level = :debug

  # Prepend all log lines with the following tags.
  # config.log_tags = [ :subdomain, :uuid ]

  # Use a different logger for distributed setups.
  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)

  # Use a different cache store in production.
  # config.cache_store = :mem_cache_store

  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
  # config.action_controller.asset_host = 'http://assets.example.com'

  # Ignore bad email addresses and do not raise email delivery errors.
  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
  # config.action_mailer.raise_delivery_errors = false

  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
  # the I18n.default_locale when a translation cannot be found).
  config.i18n.fallbacks = true

  # Send deprecation notices to registered listeners.
  config.active_support.deprecation = :notify

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new

  # Do not dump schema after migrations.
  config.active_record.dump_schema_after_migration = false
end

My Controller 我的控制器

def create
    @job = Job.find(session[:edit_job])
    @receipt = @job.receipts.create(params.require(:receipt).permit(:email, :information))  
    if @receipt.valid?
        begin
            email
            render :js => "window.location = '/jobs/#{session[:edit_job]}/edit'"
        rescue
            @receipt.destroy
            flash[:error] = "Error Sending Email!"
            render "layouts/fail"
        end
    else
        flash[:error] = "Error Creating Receipt!"
        render "layouts/fail"
    end
end

def email
            CustomerMailer.email_receipt(@receipt).deliver_now
            flash[:notice] = "Email Sent Successfully."     
end

Try to put these settings in your production.rb and see it works. 尝试将这些设置放在production.rb然后查看它是否有效。

config.action_mailer.perform_deliveries = true

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address:              'p3plcpnl0334.prod.phx3.secureserver.net',
  port:                 465,
  domain:               'finaltouchsecurity.com',
  user_name:            'receipts@finaltouchsecurity.com',
  password:             'xxxxxxxxxx',
  authentication:       'plain',
  #enable_starttls_auto: true 
  ssl: true 
}

您需要像对development.rb一样在production.rb中设置“ config.action_mailer”。也许这就是为什么您可以在开发中发送电子邮件但在生产中失败的原因

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM