1

すでに解決した回答に対する質問があるのは初めてです。これは、なぜ私の小さな修正が最初にそれを解決したのかについてです。

私は、Daniel Kehoe による Learn Rails book tutorial に従い、人々を MailChimp リストに登録するためのアプリケーションを作成しています。私は Gibbon gem を使用しています。本の中で、これは変数を設定するために使用されるモデルのコード (の一部) です。

def subscribe
  mailchimp = Gibbon::API.new(Rails.application.secrets.mailchimp_api_key)
  result = mailchimp.lists.subscribe({
    :id => Rails.application.secrets.mailchimp_list_id,
  <more code here for email and stuff>
end

問題の変数の secrets.yml ファイルは次のようになります。

mailchimp_api_key: <%= ENV["MAILCHIMP_API_KEY"] %>
mailchimp_list_id: <%= ENV["MAILCHIMP_LIST_ID"] %>

そして、私は Windows を使用しているので、それらの実際の値を application.yml に設定します。

MAILCHIMP_API_KEY: mysecretkey
MAILCHIMP_LIST_ID: mysecretid

これは、ローカルで完全に正常に機能することに注意してください。サーバーを実行してサブスクライブできます。しかし、それを Heroku にプッシュしheroku config:set MAILCHIMP_API_KEY=mysecretkey、 と同じことを介して ENV 変数を設定するとMAILCHIMP_LIST_ID、機能しません。具体的には、エラーを返しますInvalid Mailchimp List ID:

そのため、設定して実際に設定されていることを確認しても、リスト IDにはまったく値がありません。

Config Vars に関する Heroku 独自のヘルプ テキストを検索して問題を解決しました。そこでは、次のように推奨されてますENV['KEY']

モデルのコードを変更したので、使用する代わりにRails.application.secrets.mailchimp_list_id次のようになりました。

def subscribe
  mailchimp = Gibbon::API.new(Rails.application.secrets.mailchimp_api_key)
  result = mailchimp.lists.subscribe({
    :id => ENV['MAILCHIMP_LIST_ID'],
  <more code here for email and stuff>
end

そして、ご存知のとおり、Heroku (およびローカル) で動作します! しかし、なぜですか?つまり、API キーについては同じ種類のコードを理解しましたが、リスト ID については理解できませんでした。これは奇妙に思えます。また、問題の本がこれについて反映していないのはなぜですか?著者は非常に定期的に更新するつもりのようで、ほぼ宗教的な献身で質問に答えているのを目にします。この問題に遭遇するのは私だけですか?

編集:以下で解決。私は今、少しばかげていると感じています.いつものように、物事には非常に簡単な解決策があります. この本には、実際にはsecrets.ymlファイルで本番環境に複製されたキーが含まれていることに注意してください。おそらく、環境変数とフィガロgemを使用するという問題全体に対する代替ソリューションを見つけなければならなかったため、その部分を見逃していました. この本に何か批判があるとすれば、それは私たち貧弱な Windows ユーザーに対応していないということだ。:)

4

2 に答える 2

1

Figaro creates the config/application.yml file and according to its documentation, adds it to your .gitignore:

This creates a commented config/application.yml file and adds it to your .gitignore. Add your own configuration to this file and you're done!

This is done to prevent sensitive secrets (like passwords and salts) from being committed into your Git repository, where those secrets would be compromised.

Figaro does have a feature which you can use to transfer all the settings in application.yml to Heroku at once by running

figaro heroku:set -e production

config/secrets.yml結局のところ、本番セクションで Mailchimp キーを繰り返さなかったことがわかりました。これを修正するには、次のようにします。

development:
  mailchimp_api_key: <%= ENV["MAILCHIMP_API_KEY"] %>
  mailchimp_list_id: <%= ENV["MAILCHIMP_LIST_ID"] %>

production:
  mailchimp_api_key: <%= ENV["MAILCHIMP_API_KEY"] %>
  mailchimp_list_id: <%= ENV["MAILCHIMP_LIST_ID"] %>
于 2014-12-23T07:49:39.380 に答える
0

ほぼ同じエラーが発生しましたが、原因がわずかに異なります。

secrets.yml が適切に構成されていることを再確認してください。私は次のように見えました:

...
production:
  mailchimp_api_key: <%= ENV["MAILCHIMP_API_KEY"] %>
  mailchimp_list_id: ENV["MAILCHIMP_LIST_ID"]
...

このページにたどり着いた後でも、ファイルを何度もスキャンした後、行方不明の <%= %> は表示されませんでした。Google が他の人に同じタイプミスを送信した場合に備えて、この回答は残しておきます。

于 2016-08-02T16:07:33.497 に答える