Раздел "Подключение к электронной таблице", не будет создавать электронную таблицу

Работая над книгой Даниэля Кехо " Изучите Ruby on Rails", я попал в раздел подключения к электронной таблице. Я выполнил обходной маневр для Google Drive и получил флэш-уведомление об отправленном сообщении, но когда я проверяю Google Drive, я не вижу созданного

  • Learn-Rails-пример

    электронные таблицы. Это мой файл models/contact.rb.

    require 'google_drive_v0'
    class Contact
      include ActiveModel::Model
      attr_accessor :name, :string
      attr_accessor :email, :string
      attr_accessor :content, :string
    
      validates_presence_of :name
      validates_presence_of :email
      validates_presence_of :content
      validates_format_of :email, :with => /\A[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}\z/i
      validates_length_of :content, :maximum => 500
    
      def update_spreadsheet
        connection = GoogleDriveV0.login(Rails.application.secrets.email_provider_username, Rails.application.secrets.email_provider_password)
         ss = connection.spreadsheet_by_title('Learn-Rails-Example')
        if ss.nil?
          ss = connection.create_spreadsheet('Learn-Rails-Example')
        end
        ws = ss.worksheets[0]
        last_row = 1 + ws.num_rows
        ws[last_row, 1] = Time.new
        ws[last_row, 2] = self.name
        ws[last_row, 3] = self.email
        ws[last_row, 4] = self.content
        ws.save
      end
    
    end
    

Вот файл contacts_controller.rb, показывающий, что сообщение из "Контактов" должно быть отправлено на мою электронную почту.

    class ContactsController < ApplicationController

    def new
      @contact = Contact.new
    end

    def create
      @contact = Contact.new(secure_params)
      if @contact.valid?
        @contact.update_spreadsheet
        UserMailer.contact_email(@contact).deliver
        flash[:notice] = "Message sent from #{@contact.name}."
        redirect_to root_path
      else
        render :new
      end
    end

    private

    def secure_params
      params.require(:contact).permit(:name, :email, :content)
    end

  end

Когда я загружаю сервер, а затем пытаюсь отправить контактную форму, я получаю

Ошибка аутентификации для: код ответа 403 для сообщения https://www.google.com/accounts/ClientLogin: Ошибка =BadAuthentication

И тогда это в терминале:

     WARNING: GoogleDriveV0.login is deprecated and will be removed in the next version. Use GoogleDriveV0.login_with_oauth instead. Completed 500 Internal Server Error in 153ms
google_drive (1.0.0) lib/google_drive_v0/session.rb:109:in `rescue in login'
google_drive (1.0.0) lib/google_drive_v0/session.rb:102:in `login'
google_drive (1.0.0) lib/google_drive_v0/session.rb:43:in `login'
google_drive (1.0.0) lib/google_drive_v0.rb:19:in `login'
...learn-rails/app/models/contact.rb:15:in `update_spreadsheet'
...learn-rails/app/controllers/contacts_controller.rb:10:in `create'

1 ответ

Решение

У меня была та же ошибка, и, хотя проблема для меня заключалась в том, что я использовал POW для обслуживания своего сайта разработчиков, и шаги, которые я предпринял, чтобы понять, что это может помочь вам.

  1. Как и вы, я жестко закодировал переменные в методе update_spreadsheet, и это сработало - доказательство того, что метод и гем google_drive были хорошими.

  2. Затем я подтянул рельсы консоли и сделалputs Rails.application.secrets.email_provider_username которая дала мне мой адрес электронной почты и доказала, что Rails может видеть мои переменные окружения.

  3. Предполагая, что вы находитесь на Rails 4.2 версии книги и добавили gem 'web-console', '~> 2.0' в ваш файл gem, когда вы пытаетесь опубликовать форму и получить сообщение об ошибке, вы должны получить консольное приглашение. Здесь я побежал puts Rails.application.secrets.email_provider_username снова, но на этот раз получил ноль в качестве ответа, который сначала смутил меня.

  4. Это привело меня к осознанию того, что я обслуживаю сайт с POW ( http://pow.cx/ - действительно крутой способ обслуживания ваших сайтов разработчиков), который использует свой собственный файл.powenv и поэтому не имеет доступа к моим переменным. Я подтвердил это, запустив rails server и подключение через localhost:3000, и я мог бы опубликовать без проблем.

  5. поэтому добавление переменных в.powenv (и удаление файла из git путем добавления в.gitignore) решило проблему.

Надеюсь, что некоторые из шагов по устранению неполадок, описанных выше, могут помочь вам, как и я, и вы можете пройти обучение.

Другие вопросы по тегам