我用omniauth gem在/auth/twitter上提供了一个“用twitter登录”链接。
当我在开发环境中运行项目时,一切似乎都很好。但是我在尝试登录生产时收到一个错误。
在我运行rails-e生产并单击“使用Twitter登录”按钮后
已于2014-08-25 09:42:15 0200 I开始获取127.0.0.1的“/auth/twitter”信息- omniauth: (twitter)请求阶段已启动。
已开始GET“/auth/witter/callback?oauth_token=BnjEPgOdMrOMMSE**************
SessionsController#create as HTML Parameters: {“oauth_token”=
SQLite3::SQLException:没有这样的表:用户:选择"用户"。*从"用户"哪里"用户"。"提供者"='推特'和"用户"。"uid"='27*****' ORDER BY"用户"。"id"ASC限制1
我尝试手动将users表添加到db/migrate并运行rakedb:migrate,但没有成功。
我的Gemfile文件:
source 'https://rubygems.org'
gem 'rails_12factor'
gem 'spork'
gem 'omniauth-twitter', '~> 1.0.1'
gem 'rb-readline'
gem 'rspec-rails'
gem 'rspec'
gem 'bootstrap-sass'
gem 'bootstrap'
gem 'twitter-bootstrap-rails'
gem 'twitter-text'
gem 'twitter', '~> 5.3.1'
gem 'sqlite3'
gem 'sass-rails', '~> 4.0.3'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'spring', group: :development
我的配置/初始化器/omniauth_twitter.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, Rails.application.config.twitter_key, Rails.application.config.twitter_secret
end
这就是会话控制器#创建
class SessionsController < ApplicationController
def create
begin
user = User.from_omniauth( env["omniauth.auth"] )
session[:user_id] = user.id
redirect_to root_path
rescue => ex
logger.error ex.message
end
end
...
end
和User.from_omniauth
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_secret = auth.credentials.secret
user.save!
end
end
您是否在生产环境中运行迁移?
rake db:migrate RAILS_ENV=production