Select your cookie preferences

We use essential cookies and similar tools that are necessary to provide our site and services. We use performance cookies to collect anonymous statistics, so we can understand how customers use our site and make improvements. Essential cookies cannot be deactivated, but you can choose “Customize” or “Decline” to decline performance cookies.

If you agree, AWS and approved third parties will also use cookies to provide useful site features, remember your preferences, and display relevant content, including relevant advertising. To accept or decline all non-essential cookies, choose “Accept” or “Decline.” To make more detailed choices, choose “Customize.”

You are viewing documentation for version 1 of the AWS SDK for Ruby. Version 2 documentation can be found here.

Module: AWS::Rails

Defined in:
lib/aws/rails.rb

Overview

A handful of useful Rails integration methods.

If you require this gem inside a Rails application (via config.gem for rails 2 and bundler for rails 3) then Rails.setup is called automatically.

Class Method Summary collapse

Class Method Details

.add_action_mailer_delivery_method(name = :amazon_ses, options = {}) ⇒ nil

Adds a delivery method to ActionMailer that uses SimpleEmailService.

Once you have an SES delivery method you can configure Rails to use this for ActionMailer in your environment configuration (e.g. RAILS_ROOT/config/environments/production.rb)

config.action_mailer.delivery_method = :amazon_ses

Defaults

Normally you don't need to call this method. By default a delivery method named :amazon_ses is added to ActionMailer::Base. This delivery method uses your default configuration (#AWS.config).

Custom SES Options

If you need to supply configuration values for SES that are different than those in AWS.config then you can pass those options:

AWS::Rails.add_action_mailer_delivery_method(:ses, custom_options)

Parameters:

  • name (Symbol) (defaults to: :amazon_ses)

    (:amazon_ses) The name of the delivery method. The name used here should be the same as you set in your environment config. If you name the delivery method :amazon_ses then you could do something like this in your config/environments/ENV.rb file:

    config.action_mailer.delivery_method = :amazon_ses
    
  • options (Hash) (defaults to: {})

    A hash of options that are passes to SimpleEmailService#new before delivering email.

Returns:

  • (nil)
[View source]

152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/aws/rails.rb', line 152

def self.add_action_mailer_delivery_method name = :amazon_ses, options = {}

  if ::Rails.version.to_s >= '3.0'
    ActiveSupport.on_load(:action_mailer) do
      self.add_delivery_method(name, AWS::SimpleEmailService, options)
    end
  elsif defined?(::ActionMailer)
    amb = ::ActionMailer::Base
    amb.send(:define_method, "perform_delivery_#{name}") do |mail|
      AWS::SimpleEmailService.new(options).send_raw_email(mail)
    end
  end

  nil

end

.load_yaml_configObject

Loads AWS configuration options from RAILS_ROOT/config/aws.yml.

This configuration file is optional. You can omit this file and instead use ruby to configure AWS inside a configuration initialization script (e.g. RAILS_ROOT/config/intializers/aws.rb).

If you have a yaml configuration file it should be formatted like the standard database.yml file in a Rails application. This means there should be one section for Rails environment:

development:
  access_key_id: YOUR_ACCESS_KEY_ID
  secret_access_key: YOUR_SECRET_ACCESS_KEY
  simple_db_consistent_reads: false

production:
  access_key_id: YOUR_ACCESS_KEY_ID
  secret_access_key: YOUR_SECRET_ACCESS_KEY
  simple_db_consistent_reads: true

You should also consider DRYing up your configuration file using YAML references:

development:
  access_key_id: YOUR_ACCESS_KEY_ID
  secret_access_key: YOUR_SECRET_ACCESS_KEY
  simple_db_consistent_reads: false

production:
  <<: *development
  simple_db_consistent_reads: true

The yaml file will also be ERB parsed so you can use ruby inside of it:

development:
  access_key_id: YOUR_ACCESS_KEY_ID
  secret_access_key: <%= read_secret_from_a_secure_location %>
  simple_db_consistent_reads: false

production:
  <<: *development
  simple_db_consistent_reads: true
[View source]

103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/aws/rails.rb', line 103

def self.load_yaml_config

  path = Pathname.new("#{rails_root}/config/aws.yml")

  if File.exist?(path)
    cfg = YAML::load(ERB.new(File.read(path)).result)
    unless cfg[rails_env]
      raise "config/aws.yml is missing a section for `#{rails_env}`"
    end
    AWS.config(cfg[rails_env])
  end

end

.log_to_rails_loggernil

Configures AWS to log to the Rails default logger.

Returns:

  • (nil)
[View source]

171
172
173
174
# File 'lib/aws/rails.rb', line 171

def self.log_to_rails_logger
  AWS.config(:logger => rails_logger)
  nil
end

.setupnil

Adds extra functionality to Rails.

Normally this method is invoked automatically when you require this gem in a Rails Application:

Rails 3+ (RAILS_ROOT/Gemfile)

gem 'aws-sdk'

Rails 2.1 - 2.3 (RAILS_ROOT/config/environment.rb)

config.gem 'aws-sdk'

Returns:

  • (nil)
[View source]

53
54
55
56
57
58
# File 'lib/aws/rails.rb', line 53

def self.setup
  load_yaml_config
  add_action_mailer_delivery_method
  log_to_rails_logger
  nil
end