Ruby on rails Heroku使用自定义函数部署Ruby on Rails应用程序
我设计了一个RubyonRails3.2应用程序,其中有一个用户模型。我编写了一个自定义函数,以便通过另一个移动应用程序验证用户名和密码。 在localhost中一切正常,我能够从移动应用程序进行身份验证。所以,我更进一步,在Heroku部署了它。现在,身份验证功能不起作用 在我的Gem文件中我包含了以下内容:Ruby on rails Heroku使用自定义函数部署Ruby on Rails应用程序,ruby-on-rails,sqlite,postgresql,ruby-on-rails-3.1,heroku,Ruby On Rails,Sqlite,Postgresql,Ruby On Rails 3.1,Heroku,我设计了一个RubyonRails3.2应用程序,其中有一个用户模型。我编写了一个自定义函数,以便通过另一个移动应用程序验证用户名和密码。 在localhost中一切正常,我能够从移动应用程序进行身份验证。所以,我更进一步,在Heroku部署了它。现在,身份验证功能不起作用 在我的Gem文件中我包含了以下内容: group :production do gem 'pg' end group :development do gem 'sqlite3' end match 'user
group :production do
gem 'pg'
end
group :development do
gem 'sqlite3'
end
match 'users/authenticate' => 'users#authenticate', :as => :authenticate
match 'users/saveUser' => 'users#saveUser', :as => :saveUser
resources :users
resources :festivals
root :to => 'users#index'
在myusers\u controller.rb中,我编写了自定义的身份验证功能:
# http://wgo-ror.herokuapp.com/users/authenticate?userName=ramy&password=123456
def authenticate
usr = params[:userName]
pwd = params[:password]
@getUser = User.where("userName = ? AND password = ?", params[:userName], params[:password])
if (@getUser!=[])
respond_to do |format|
format.html { render :json => {:Success => true, :Data => @getUser}, :callback => params[:callback] }
format.json { render :json => {:Success => true, :Data => @getUser}, :callback => params[:callback] }
end
else
respond_to do |format|
format.html { render :json => {:Success => false, :Data => @getUser}, :callback => params[:callback] }
format.json { render :json => {:Success => false, :Data => @getUser}, :callback => params[:callback] }
end
end
end
我还编写了另一个名为saveUser的自定义函数。即使在我将其部署到heroku之后,该特定函数仍能正常工作
# http://wgo-ror.herokuapp.com/users/saveUser?id=1&userName=yrkapil&password=123456&email=yrkapil@gmail.com
def saveUser
@user = User.find(params[:id])
@user.update_attributes(:userName => params[:userName], :password => params[:password], :email => params[:email] )
end
在myroutes.rb中,我包括以下内容:
group :production do
gem 'pg'
end
group :development do
gem 'sqlite3'
end
match 'users/authenticate' => 'users#authenticate', :as => :authenticate
match 'users/saveUser' => 'users#saveUser', :as => :saveUser
resources :users
resources :festivals
root :to => 'users#index'
是我遗漏了什么,还是因为postgresql?我不知道怎么做。请帮帮我,伙计们。我真的需要让它工作起来。提前谢谢 您的
userName
列中可能有一个案例问题
您创建的userName
列如下所示:
t.string :userName
create table t ("userName" text);
insert into t values ('x');
select * from t where username = 'x';
这将导致Rails向数据库发送如下SQL:
create table users (
"userName" varchar(255),
...
)
注意用户名
标识符周围的引号;引号使该列名区分大小写。但是,PostgreSQL中不带引号的标识符被折叠成小写(SQL标准说是大写,但这在这里并不重要)。基本上,引号意味着您在引用该列时必须始终说“userName”
,不能说userName
或userName
或其他任何内容
另一方面,SQLite对SQL的解释非常松散,因此您可以这样做:
t.string :userName
create table t ("userName" text);
insert into t values ('x');
select * from t where username = 'x';
一切都会好起来的
每次让ActiveRecord生成列名时,它都会引用它,以便:
@user.update_attributes(:userName => params[:userName], :password => params[:password], :email => params[:email] )
最终会这样做:
update users
set "userName" = ...
每个人都很开心。但是,您正在这里使用一个SQL片段:
@getUser = User.where("userName = ? AND password = ?", params[:userName], params[:password])
没有引用您的用户名
标识符,因此PostgreSQL可能会抱怨未知列。如果您这样做:
@getUser = User.where('"userName" = ? AND password = ?', params[:userName], params[:password])
你会有更好的运气。或者你可以这样做:
@getUser = User.where(:userName => params[:userName], :password => params[:password])
或者这个:
@getUser = User.where(:userName => params[:userName]).where(:password => params[:password])
你应该做两件事:
你说不工作是什么意思?你的日志怎么说?如果没有日志文件和产生的错误,我们什么都做不了。