Reputation: 21
I've been working on an Ruby on Rails app that allows you to assign tasks to users, who then get an email. Users can then reply to that task assignment email to update on task progress, which should theoretically invoke a model to write to the database. My site is deployed on Render.
I'm sending out emails without issue using Sendgrid via Action Mailer. When I test locally with ngrok, the Action Mailbox works perfectly. However, in production, I get these errors from my Logs on Render.com:
I, [2024-07-31T19:28:09.968789 #134] INFO -- : [ada35607-20ae-4f61-a13c-aa080eddafe0] Filter chain halted as :authenticate_by_password rendered or redirected
I, [2024-07-31T19:28:09.968874 #134] INFO -- : [ada35607-20ae-4f61-a13c-aa080eddafe0] Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms | Allocations: 77)
I know that sendgrid has the right password, because again, it works in development.
And the url is set up correctly:
https://actionmailbox:<password>@<sitename.com>/rails/action_mailbox/sendgrid/inbound_emails
.
I've tried changing my environments/production.rb file, here it is:
require "active_support/core_ext/integer/time"
Rails.application.configure do
# Prepare the ingress controller used to receive mail
# config.action_mailbox.ingress = :relay
# Settings specified here will take precedence over those in config/application.rb.
# Code is not reloaded between requests.
config.enable_reloading = false
# 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
# Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
# key such as config/credentials/production.key. This key is used to decrypt credentials (and other encrypted files).
# config.require_master_key = true
# Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.
# config.public_file_server.enabled = false
# Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass
# Do not fall back to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.asset_host = "http://assets.example.com"
# 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
# Store uploaded files on the local file system (see config/storage.yml for options).
config.active_storage.service = :local
# Mount Action Cable outside main process or domain.
# config.action_cable.mount_path = nil
# config.action_cable.url = "wss://example.com/cable"
# config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ]
# Assume all access to the app is happening through a SSL-terminating reverse proxy.
# Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
# config.assume_ssl = true
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
config.force_ssl = true
# Log to STDOUT by default
config.logger = ActiveSupport::Logger.new(STDOUT)
.tap { |logger| logger.formatter = ::Logger::Formatter.new }
.then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags.
config.log_tags = [ :request_id ]
# "info" includes generic and useful information about system operation, but avoids logging too much
# information to avoid inadvertent exposure of personally identifiable information (PII). If you
# want to log everything, set the level to "debug".
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
# Use a different cache store in production.
# config.cache_store = :mem_cache_store
# Use a real queuing backend for Active Job (and separate queues per environment).
# config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "bordu_production"
config.action_mailer.perform_caching = false
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { host: "bordu.vip", protocol:"https" }
ActionMailer::Base.smtp_settings = {
:user_name => 'apikey',
:password => ENV.fetch('SENDGRID_API_KEY'),
:domain => 'sitename.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
config.action_mailbox.ingress = :sendgrid
# 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
# Don't log any deprecations.
config.active_support.report_deprecations = false
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
# Enable DNS rebinding protection and other `Host` header attacks.
# config.hosts = [
# "example.com", # Allow requests from example.com
# /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
# ]
# Skip DNS rebinding protection for the default health check endpoint.
# config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
end
I've tried moving the config.action_mailbox.ingress
to my config/environment.rb file with no luck. I've also tried using cURL commands to hit the Sendgrid Inbound Parse webhook with no response in the terminal or logging on Render.
I can't even find Action Mailbox's :authenticate_by_password
method to log and see the issue, so I'm completely at a loss.
Upvotes: 0
Views: 88