5

フォームから送信されたデータをGoogleドライブ(app/models/contact.rb)のアカウントのスプレッドシートに接続して保存する方法を持つ連絡先コントローラーがあります。

def update_spreadsheet
    connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])
    ss = connection.spreadsheet_by_title('Learn-Rails02-Example')
    if ss.nil?
        ss = connection.create_spreadsheet('Learn-Rails02-Example')
    end

このメソッドは、次のように config/environments/development.rb に保存されている figaro で設定した環境変数を呼び出します。

GMAIL_USERNAME: tgolsby@gmail.com
GMAIL_PASSWORD: Paxxword (obviously this is a place holder for my actual password in the .yml file)

フォームを送信すると、次のエラーが表示されます。

*GoogleDrive::AuthenticationError at /contacts
Authentication failed for tgolsby: Response code 403 for post https://www.google.com/accounts/ClientLogin: Error=BadAuthentication*

これは、連絡先モデルの次の行を指しています。

*def update_spreadsheet*
    **connection = GoogleDrive.login(ENV["GMAIL_USERNAME"], ENV["GMAIL_PASSWORD"])**
    *ss = connection.spreadsheet_by_title('Learn-Rails02-Example')
    if ss.nil?
        ss = connection.create_spreadsheet('Learn-Rails02-Example')
    end*

ユーザー名とパスワードを確認して再確認しましたが、application.yml ファイルでそれらが正しいことを 100% 確信しています。チュートリアルを完了し、すべての手順を繰り返しましたが、アプリが Google に接続できない理由がわかりません。Google アカウントに 2 段階認証プロセスが設定されていないことも確認しました。

4

3 に答える 3

2

コードは適切です ( learn-railsサンプル アプリケーションと比較して確認できます)。これは、 Learn Ruby on Railsブックのコードとまったく同じように見えます。

これは、問題が環境または構成の問題の結果であることを意味します。

まず、ローカルで実行していますか、それとも Heroku にデプロイした後に問題が発生していますか?

ローカルで実行している場合は、次のトラブルシューティングを試すことができます。

1) Web サーバーを再起動してみてください。構成ファイルを変更すると、サーバーを再起動する必要があります。

2) コードを置き換えENV["..."]て、資格情報を直接使用します (「資格情報をハードコードする」)。ハードコードされた資格情報を使用してコードを git リポジトリにチェックインしないように注意してください (資格情報が公開されるため、GitHub にプッシュしないでください)。

3) アプリケーションからメールを送信できますか? スプレッドシートを更新するコードをコメント アウトします。資格情報が正しければ、メールを送信できるはずです。

于 2014-01-12T12:48:54.063 に答える