【问题标题】:Ruby on Rails - Submitting Email Form Newsletter to MailchimpRuby on Rails - 向 Mailchimp 提交电子邮件表单时事通讯
【发布时间】:2018-02-04 06:16:31
【问题描述】:

我正在尝试提交一封电子邮件,该电子邮件将进入我创建的 Mailchimp 列表。问题是,当我在生产环境中单击订阅时,我会在控制台中收到 200 OK 消息:

[ee0cda43-9651-4c7e-9499-ac499094d8b6] Started POST "/subscribe" for 127.0.0.1 at 2017-08-26 02:52:00 -0700
[ee0cda43-9651-4c7e-9499-ac499094d8b6] Processing by SubscriptionsController#subscribe as JSON
[ee0cda43-9651-4c7e-9499-ac499094d8b6]   Parameters: {"email"=>"wlpz@gmail.com"}
[ee0cda43-9651-4c7e-9499-ac499094d8b6] Completed 200 OK in 2ms (Views: 0.4ms)

但是当我签入我的列表时,该电子邮件没有出现在我的联系人列表中。

顺便说一句,我正在使用 Ruby 2.3.1、Rails 5.1.2 和 Figaro 1.1.1 进行 ENV

这就是我在home.html.erb 中的样子:

<div class="subscribe">
    <div class="row">
      <div class="col-lg-12">
        <h4>Sign up for our Newsletter</h4>
        <div class="row small-uncollapse large-collapse">
          <div class="col-lg-11">
            <input id="email" placeholder="Your Email" type="text">/</input>
          </div>
          <div class="col-lg-1">
            <button class=".btn-primary" id="subscribe">Subscribe</button>
          </div>
        </div>
      </div>
    </div>
  </div>

routes.rb:

get 'subscriptions/subscribe'
post :subscribe, controller: :subscriptions, action: :subscribe

使用 Gibbon 与 Mailchimp 进行 API 连接:

Gibbon::Request.api_key = ENV["MAILCHIMP_API_KEY"]
Gibbon::Request.timeout = 15
Gibbon::Request.open_timeout = 15
Gibbon::Request.symbolize_keys = true
Gibbon::Request.debug = false
puts "MailChimp API key: #{Gibbon::Request.api_key}" # temporary

并把带有AJAX的JS脚本集成到application.js

$(document).ready(function () {
    $('#subscribe').click(function () {
        var email = $('#email').val();
        $.ajax({
            url: '/subscribe',
            type: 'post',
            dataType: 'json',
            data: {email: email}
        })
        .done(function (data) {
            $('.subscribe').html('<strong>' + data.message + '</strong>');
        });

    });
});

我错过了什么吗?任何建议都将不胜感激。

----更新----

订阅控制器:

class SubscriptionsController < ApplicationController
  def subscribe
    email = params[:email]
    gb = Gibbon::Request.new
    gb.lists.subscribe({:id => ENV["MAILCHIMP_LIST_ID"],
                        :email => {email: email}, :double_optin => false})
    render json: {message: "You are signed (#{email}) and good to go! Check your e-mail. Thank You!"}
  end
end

----更新 2----

class SubscriptionsController < ApplicationController
  def subscribe
    email_address = params[:email_address]
    gb = Gibbon::Request.new
    gb.lists(ENV["MAILCHIMP_LIST_ID"]).members.create(body: {email_address: "email", status: "subscribed"})
    render json: {message: "You are signed (#{email_address}) and good to go! Check your e-mail. Thank You!"}
  end
end

application.js 中更新了data

data: {email_address: email}

错误日志:

[a6e21ee4-b955-4453-a1e0-56ff8035faee] Started POST "/subscribe" for 127.0.0.1 at 2017-08-27 04:25:33 -0700
[a6e21ee4-b955-4453-a1e0-56ff8035faee] Processing by SubscriptionsController#subscribe as JSON
[a6e21ee4-b955-4453-a1e0-56ff8035faee]   Parameters: {"email"=>"jlpz84@gmail.com"}
[a6e21ee4-b955-4453-a1e0-56ff8035faee] Completed 500 Internal Server Error in 956ms
[a6e21ee4-b955-4453-a1e0-56ff8035faee]   
[a6e21ee4-b955-4453-a1e0-56ff8035faee] Gibbon::MailChimpError (the server responded with status 400 @title="Invalid Resource", @detail="Please provide a valid email address.", @body={:type=>"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/", :title=>"Invalid Resource", :status=>400, :detail=>"Please provide a valid email address.", :instance=>""}, @raw_body="{\"type\":\"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/\",\"title\":\"Invalid Resource\",\"status\":400,\"detail\":\"Please provide a valid email address.\",\"instance\":\"\"}", @status_code=400):
[a6e21ee4-b955-4453-a1e0-56ff8035faee]   
[a6e21ee4-b955-4453-a1e0-56ff8035faee] app/controllers/subscriptions_controller.rb:8:in `subscribe'

【问题讨论】:

  • 看起来 200 响应来自您自己的 subscriptions 控制器,而不是 Gibbon/Mailchimp。你能发布那个控制器的代码吗?
  • 感谢您的帮助。问题已更新为底部的控制器。忘记添加了。
  • 您使用的是哪个版本的 Gibbon gem?这就是 v1.x 语法(查看更多:github.com/amro/gibbon#subscribing-a-member-to-a-list)。那是对的吗? gb.lists.subscribe 返回什么?
  • 我没有阅读整个文档,这令人不安。所以是的,我使用的是当前版本的 Gibbon (3.1.0)。忘记了参数从 v 1.0 更改为 2.0 的小细节。所以我做了更改(检查我更新的问题),输入了一个有效的 gmail 地址,但我收到了另一个错误,我也在问题的底部发布了这个错误。它告诉provide a valid e-mail address 我这样做了,有两个不同的 gmail 地址,但仍然出现相同的错误。

标签: jquery ruby-on-rails mailchimp gibbon figaro-ruby


【解决方案1】:

根据您的更新,我认为您已经接近了,但我认为:

body: {email_address: "email", status: "subscribed"}

应该是:

body: {email_address: email_address, status: "subscribed"}

在某些情况下,我抓取了一些使用 Gibbon 的 upsert 方法的代码:

    Gibbon::Request.lists(@subscriber.mailing_list_info.list_id)
    .members(Digest::MD5.hexdigest(@subscriber.email))
    .upsert(
      body: {
        status_if_new: 'subscribed',
        email_address: @subscriber.email,
        merge_fields: @subscriber.mailing_list_info.merge_vars })

据我记得,如果成员存在,这将更新成员,如果不存在,则添加它们。

@subscriber@subscriber.mailing_list_info 是我们用来包装 User 并添加相关 Mailchimp 信息的对象。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2014-07-01
    • 2011-04-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多