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
-
.add_action_mailer_delivery_method(name = :amazon_ses, options = {}) ⇒ nil
Adds a delivery method to ActionMailer that uses SimpleEmailService.
-
.load_yaml_config ⇒ Object
Loads AWS configuration options from
RAILS_ROOT/config/aws.yml
. -
.log_to_rails_logger ⇒ nil
Configures AWS to log to the Rails defualt logger.
-
.setup ⇒ nil
Adds extra functionality to Rails.
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.add_action_mailer_delivery_method(:ses, )
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/aws/rails.rb', line 153 def self.add_action_mailer_delivery_method name = :amazon_ses, = {} if ::Rails.version.to_f >= 3 ActiveSupport.on_load(:action_mailer) do self.add_delivery_method(name, AWS::SimpleEmailService, ) end else amb = ::ActionMailer::Base amb.send(:define_method, "perform_delivery_#{name}") do |mail| AWS::SimpleEmailService.new().send_raw_email(mail) end end nil end |
.load_yaml_config ⇒ Object
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
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.exists?(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_logger ⇒ nil
Configures AWS to log to the Rails defualt logger.
172 173 174 175 |
# File 'lib/aws/rails.rb', line 172 def self.log_to_rails_logger AWS.config(:logger => rails_logger) nil end |
.setup ⇒ nil
Adds extra functionality to Rails.
Normailly 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'
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 |