Ruby on rails 获取NoMethodError(未定义的方法`合并';for&<;RailsConfig::Options address=&“;smtp.sendgrid.net”;,端口=587
我使用的是rails 4.1.6和Desive版本3.4.1,每当用户注册时,电子邮件都会发送给用户。对于电子邮件,我使用了Sendgrid,电子邮件发送延迟作业,但我发现以下错误Ruby on rails 获取NoMethodError(未定义的方法`合并';for&<;RailsConfig::Options address=&“;smtp.sendgrid.net”;,端口=587,ruby-on-rails,devise,sendgrid,Ruby On Rails,Devise,Sendgrid,我使用的是rails 4.1.6和Desive版本3.4.1,每当用户注册时,电子邮件都会发送给用户。对于电子邮件,我使用了Sendgrid,电子邮件发送延迟作业,但我发现以下错误 INFO -- : Parameters: {"utf8"=>"✓", "authenticity_token"=>"4CwXT+J4dG1H9LqAlLpwnet4kGjLKXUVAXZl3n2FVv4=", "user"=>{"profile_attributes"=>{"first
INFO -- : Parameters: {"utf8"=>"✓", "authenticity_token"=>"4CwXT+J4dG1H9LqAlLpwnet4kGjLKXUVAXZl3n2FVv4=", "user"=>{"profile_attributes"=>{"first_name"=>"dd", "last_name"=>"dd"}, "email"=>"test_email@yopmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}
[2015-05-21T11:22:12.638783 #22298] INFO -- : Completed 500 Internal Server Error in 92ms
[2015-05-21T11:22:12.641223 #22298] FATAL -- :
NoMethodError (undefined method `merge' for #<RailsConfig::Options address="smtp.sendgrid.net", port=587, domain="abc.com", user_name="abc", password="sdhs", authentication="plain", enable_starttls_auto=true>):
app/controllers/users/registrations_controller.rb:11:in `create'
我遇到上述错误,非常感谢您的帮助。问题是RailsConfig gem,您正在尝试将哈希分配给smtp设置 在
development.rb
或production.rb
config.action_mailer.smtp_settings = Settings.smtp_settings
但是Settings.smtp\u Settings
的类是
Settings.smtp_settings.class
#=> RailsConfig::Options < OpenStruct
因此,您需要将值更改为散列
Settings.email_provider.to_hash.class
#=> Hash < Object
Settings.email_provider.to_hash
#=> {
#=> :address => "smtp.sendgrid.net",
#=> :port => 587,
#=> :domain => "test.domain.com",
#=> :user_name => "username",
#=> :password => "password",
#=> :authentication => "plain",
#=> :enable_starttls_auto => true
#=> }
Settings.email_provider.merge({some_key: 2})
#=> NoMethodError: undefined method `merge' for #<Config::Options
#=> address="smtp.sendgrid.net", port=587, domain="test.domain.com",
#=> user_name="username", password="password", authentication="plain",
#=> enable_starttls_auto=true>
Settings.email_provider.to_hash.class
#=> Hash < Object
Settings.email_provider.to_hash
#=> {
#=> :address => "smtp.sendgrid.net",
#=> :port => 587,
#=> :domain => "test.domain.com",
#=> :user_name => "username",
#=> :password => "password",
#=> :authentication => "plain",
#=> :enable_starttls_auto => true
#=> }
config.action_mailer.smtp_settings = Settings.smtp_settings
# to
config.action_mailer.smtp_settings = {
address: Settings.smtp_settings.address,
port: Settings.smtp_settings.port,
domain: Settings.smtp_settings.domain,
user_name: Settings.smtp_settings.user_name,
password: Settings.smtp_settings.password,
authentication: Settings.smtp_settings.authentication,
enable_starttls_auto: Settings.smtp_settings.enable_starttls_auto
}