Раздел "Подключение к электронной таблице", не будет создавать электронную таблицу
Работая над книгой Даниэля Кехо " Изучите 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 для обслуживания своего сайта разработчиков, и шаги, которые я предпринял, чтобы понять, что это может помочь вам.
Как и вы, я жестко закодировал переменные в методе update_spreadsheet, и это сработало - доказательство того, что метод и гем google_drive были хорошими.
Затем я подтянул рельсы консоли и сделал
puts Rails.application.secrets.email_provider_username
которая дала мне мой адрес электронной почты и доказала, что Rails может видеть мои переменные окружения.Предполагая, что вы находитесь на Rails 4.2 версии книги и добавили
gem 'web-console', '~> 2.0'
в ваш файл gem, когда вы пытаетесь опубликовать форму и получить сообщение об ошибке, вы должны получить консольное приглашение. Здесь я побежалputs Rails.application.secrets.email_provider_username
снова, но на этот раз получил ноль в качестве ответа, который сначала смутил меня.Это привело меня к осознанию того, что я обслуживаю сайт с POW ( http://pow.cx/ - действительно крутой способ обслуживания ваших сайтов разработчиков), который использует свой собственный файл.powenv и поэтому не имеет доступа к моим переменным. Я подтвердил это, запустив
rails server
и подключение через localhost:3000, и я мог бы опубликовать без проблем.поэтому добавление переменных в.powenv (и удаление файла из git путем добавления в.gitignore) решило проблему.
Надеюсь, что некоторые из шагов по устранению неполадок, описанных выше, могут помочь вам, как и я, и вы можете пройти обучение.