I want to verify if a user exists, and if so, do a password match.
My controller looks like this:
def attempt_login
authorized_user = User.authenticate(params[:username], params[:password])
if authorized_user
flash[:notice] = "Successfully logged in."
redirect_to(:action => 'menu')
else
flash[:notice] = "Invalid username/password"
redirect_to(:action => 'login')
end
end
The model looks like:
def self.authenticate(username="", password="")
user = User.find_by_username(username)
if user && user.password_match?(password)
return user
else
return false
end
end
def password_match?(password="")
hashed_password == User.hash_with_salt(password,salt)
end
In the process of doing this, I receive the TypeError (Can't convert String into Integer). I suspect the error occurs when I want to set a value for authorized_user, but do not know how to approach this issue.
Edit:
My server log is empty. But I can post the Framework Trace:
activesupport (3.0.8) lib/active_support/descendants_tracker.rb:23:in `delete'
activesupport (3.0.8) lib/active_support/descendants_tracker.rb:23:in `block in clear'
activesupport (3.0.8) lib/active_support/descendants_tracker.rb:21:in `each'
activesupport (3.0.8) lib/active_support/descendants_tracker.rb:21:in `clear'
railties (3.0.8) lib/rails/application/bootstrap.rb:59:in `block (2 levels) in <module:Bootstrap>'
activesupport (3.0.8) lib/active_support/callbacks.rb:420:in `_run_call_callbacks'
actionpack (3.0.8) lib/action_dispatch/middleware/callbacks.rb:44:in `call'
rack (1.2.3) lib/rack/sendfile.rb:107:in `call'
actionpack (3.0.8) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'
actionpack (3.0.8) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'
railties (3.0.8) lib/rails/rack/logger.rb:13:in `call'
rack (1.2.3) lib/rack/runtime.rb:17:in `call'
activesupport (3.0.8) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.2.3) lib/rack/lock.rb:11:in `block in call'
<internal:prelude>:10:in `synchronize'
rack (1.2.3) lib/rack/lock.rb:11:in `call'
actionpack (3.0.8) lib/action_dispatch/middleware/static.rb:30:in `call'
railties (3.0.8) lib/rails/application.rb:168:in `call'
railties (3.0.8) lib/rails/application.rb:77:in `method_missing'
railties (3.0.8) lib/rails/rack/log_tailer.rb:14:in `call'
rack (1.2.3) lib/rack/content_length.rb:13:in `call'
rack (1.2.3) lib/rack/handler/webrick.rb:52:in `service'
E:/Ruby192/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service'
E:/Ruby192/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run'
E:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread'
And here is the development.log if it could help:
Started POST "/access/attempt_login" for 127.0.0.1 at 2011-06-27 20:19:19 +0200
DEPRECATION WARNING: config.action_view.debug_rjs will be removed in 3.1, from 3.1 onwards you will need to install prototype-rails to continue to use RJS templates . (called from <top (required)> at G:/Projects/basicsocial/app/controllers/application_controller.rb:1)
Processing by AccessController#attempt_login as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"jvGVYJEypK9sWoaaa5c2OwzBKmCMX7h7Wp28vBH9wfw=", "username"=>"test88", "password"=>"[FILTERED]", "commit"=>"Log In"}
<-[1m<-[36mSQL (7.0ms)<-[0m <-[1mdescribe `users_pages`<-[0m
<-[1m<-[35mSQL (2.0ms)<-[0m SHOW TABLES
<-[1m<-[36mUser Load (0.0ms)<-[0m <-[1mSELECT `users`.* FROM `users` WHERE `users`.`username` = 'test88' LIMIT 1<-[0m
Redirected to http://localhost:3000/admin
Completed 302 Found in 545ms
TypeError (can't convert String into Integer):
Rendered E:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
Rendered E:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (5.0ms)
Rendered E:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.8/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (16.0ms)
The salt variable is what I use to better secure my user's page. This is something that is stored in the database.
Apparently there was nothing wrong with the code. It was probably related to my browsers cache or something of that nature, as it started working the next day. Sorry for the inconvenience.
I had this same problem and spent hours trying to fix it. It turned out that I had left in a method that the tutorial had told me to delete a few videos beforehand:
def self.hash(password="")
Digest::SHA1.hexdigest(password)
end
In the tutorial, this had been replaced by the methods
def self.make_salt(username="")
Digest::SHA1.hexdigest("Use #{username} with #{Time.now} to make salt")
end
def self.hash_with_salt(password="", salt="")
Digest::SHA1.hexdigest("Put #{salt} on the #{password}")
end
Once I commented this method out, the error went away. I still don't understand why that error showed up in the first place. I added a question and more detail here.
Just want to let you know that i had this problem as well.
The issue was quickly solved but the server showed the error every request afterwards.
Code changes have not been reflected until i restarted the server.
touch tmp/restart.txt was not sufficient so i had to restart the server /etc/init.d/apache2 restart to remove the error message.
$ apache2 -v
Server version: Apache/2.2.16 (Debian)
Server built: Apr 1 2012 07:14:38
$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
$ gem list passenger
*** LOCAL GEMS ***
passenger (3.0.13)
$ bundle exec rails -v
Rails 3.0.7
Related
I'm really sorry to ask this when there are a lot of similar posts but none seams to work for me.
/app/controllers/api/v1/musics_controller.rb:
class Api::V1::MusicsController < ApplicationController::API
def index
music = Music.order('created_at DESC');
render json: {status: 'SUCCESS', message:'Loaded articles', data:music},status: :ok
end
end
config/routes.rb:
Rails.application.routes.draw do
namespace 'api' do
namespace 'v1' do
resources :music
end
end
end
Error:
activesupport (5.1.2) lib/active_support/inflector/methods.rb:271:in
const_get' activesupport (5.1.2)
lib/active_support/inflector/methods.rb:271:inblock in constantize'
activesupport (5.1.2) lib/active_support/inflector/methods.rb:267:in
each' activesupport (5.1.2)
lib/active_support/inflector/methods.rb:267:ininject' activesupport
(5.1.2) lib/active_support/inflector/methods.rb:267:in constantize'
actionpack (5.1.2) lib/action_dispatch/http/request.rb:82:in
controller_class' actionpack (5.1.2)
lib/action_dispatch/routing/route_set.rb:43:in controller' actionpack
(5.1.2) lib/action_dispatch/routing/route_set.rb:29:inserve'
actionpack (5.1.2) lib/action_dispatch/journey/router.rb:46:in block
in serve' actionpack (5.1.2)
lib/action_dispatch/journey/router.rb:33:ineach' actionpack (5.1.2)
lib/action_dispatch/journey/router.rb:33:in serve' actionpack (5.1.2)
lib/action_dispatch/routing/route_set.rb:832:incall' rack (2.0.3)
lib/rack/etag.rb:25:in call' rack (2.0.3)
lib/rack/conditional_get.rb:25:incall' rack (2.0.3)
lib/rack/head.rb:12:in call' rack (2.0.3)
lib/rack/session/abstract/id.rb:232:incontext' rack (2.0.3)
lib/rack/session/abstract/id.rb:226:in call' actionpack (5.1.2)
lib/action_dispatch/middleware/cookies.rb:613:incall' activerecord
(5.1.2) lib/active_record/migration.rb:556:in call' actionpack
(5.1.2) lib/action_dispatch/middleware/callbacks.rb:26:inblock in
call' activesupport (5.1.2) lib/active_support/callbacks.rb:97:in
run_callbacks' actionpack (5.1.2)
lib/action_dispatch/middleware/callbacks.rb:24:incall' actionpack
(5.1.2) lib/action_dispatch/middleware/executor.rb:12:in call'
actionpack (5.1.2)
lib/action_dispatch/middleware/debug_exceptions.rb:59:incall'
actionpack (5.1.2)
lib/action_dispatch/middleware/show_exceptions.rb:31:in call'
railties (5.1.2) lib/rails/rack/logger.rb:36:incall_app' railties
(5.1.2) lib/rails/rack/logger.rb:24:in block in call' activesupport
(5.1.2) lib/active_support/tagged_logging.rb:69:inblock in tagged'
activesupport (5.1.2) lib/active_support/tagged_logging.rb:26:in
tagged' activesupport (5.1.2)
lib/active_support/tagged_logging.rb:69:intagged' railties (5.1.2)
lib/rails/rack/logger.rb:24:in call' actionpack (5.1.2)
lib/action_dispatch/middleware/remote_ip.rb:79:incall' actionpack
(5.1.2) lib/action_dispatch/middleware/request_id.rb:25:in call' rack
(2.0.3) lib/rack/method_override.rb:22:incall' rack (2.0.3)
lib/rack/runtime.rb:22:in call' activesupport (5.1.2)
lib/active_support/cache/strategy/local_cache_middleware.rb:27:in
call' actionpack (5.1.2)
lib/action_dispatch/middleware/executor.rb:12:in call' actionpack
(5.1.2) lib/action_dispatch/middleware/static.rb:125:incall' rack
(2.0.3) lib/rack/sendfile.rb:111:in call' railties (5.1.2)
lib/rails/engine.rb:522:incall' puma (3.9.1)
lib/puma/configuration.rb:224:in call' puma (3.9.1)
lib/puma/server.rb:602:inhandle_request' puma (3.9.1)
lib/puma/server.rb:435:in process_client' puma (3.9.1)
lib/puma/server.rb:299:inblock in run' puma (3.9.1)
lib/puma/thread_pool.rb:120:in `block in spawn_thread'
You have two options: to change your resources to the plural way :musics (which is recommended) or to change the name of your controller and all the files related (routes, directories, controller class) to the singular way.
In the code you've provided you need to specify your resources route in the plural way, that's why Rails says it doesn't find the API::V1::MusicController, because your controller is called MusicsController, try just adding the missing s to your route:
Rails.application.routes.draw do
namespace 'api' do
namespace 'v1' do
resources :musics
end
end
end
i am trying to load font-awesome to my view
I have read other answers and implement the Rails: Using Font Awesome
What i have done
config/application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(:default, Rails.env)
module Blog
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
# config.time_zone = 'Central Time (US & Canada)'
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
# config.i18n.default_locale = :de
config.assets.paths << Rails.root.join("app", "assets", "fonts")
end
end
I have rename the font-awesome.min.css to font-awesome.min.css.erb and use assets_path
#font-face{font-family:'FontAwesome';
src:url('<%= asset_path("fontawesome-webfont.eot?v=4.0.3") %>');
src:url('<%= asset_path("awesome-webfont.eot?#iefix&v=4.0.3") %>') format('embedded-opentype'),
url('<%= asset_path("fontawesome-webfont.woff?v=4.0.3") %>') format('woff'),
url('<%= asset_path("fontawesome-webfont.ttf?v=4.0.3") %>') format('truetype'),
url('<%= asset_path("fontawesome-webfont.svg?v=4.0.3#fontawesomeregula") %>') format('svg');
font-weight:normal;font-style:normal}
and load the css file on the view
<%= stylesheet_link_tag 'bootstrap.css' %>
<%= stylesheet_link_tag 'animate.css' %>
<%= stylesheet_link_tag 'font-awesome.min.css' %>
<%= stylesheet_link_tag 'font.css' %>
<%= stylesheet_link_tag 'app.css' %>
and on Chrome the font files are not loaded
and on server i get
Started GET "/fontawesome-webfont.ttf?v=4.0.3" for 127.0.0.1 at 2014-02-14 08:36:37 +0200
ActionController::RoutingError (No route matches [GET] "/fontawesome-webfont.ttf"):
actionpack (4.0.2) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.2) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.2) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.2) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.2) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.2) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.2) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.2) lib/action_dispatch/middleware/static.rb:64:in `call'
rack (1.5.2) lib/rack/sendfile.rb:112:in `call'
railties (4.0.2) lib/rails/engine.rb:511:in `call'
railties (4.0.2) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
/usr/local/rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/webrick/httpserver.rb:138:in `service'
/usr/local/rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/webrick/httpserver.rb:94:in `run'
/usr/local/rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/webrick/server.rb:295:in `block in start_thread'
Please help
The easiest way to integrate font-awesome to rails is via font-awesome-rails gem. It will integrate font-awesome to rails asset pipeline.
In your Gemfile add
gem "font-awesome-rails"
and run bundle install to install the gem
Then in your scss file import it using
#import "font-awesome";
That's it! Now you can use it in your view as
<i class="fa fa-bell-o"></i>
If you prefer to use css instead of scss then add the require statement in your application.css
*= require font-awesome
Update
If you don't want to use font-awesome-rails gem then follow the steps
Place your fonts in the folder app/assets/fonts
In config/application.rb add the following lines
# Add fonts path
config.assets.paths << "#{Rails.root}/app/assets/fonts"
# Precompile additional assets
config.assets.precompile += %w( .svg .eot .woff .ttf )
Declare your font in font-awesome.css.erb like
#font-face {
font-family:'FontAwesome';
src: font-url('fontawesome-webfont.eot');
src: font-url('fontawesome-webfont?#iefix') format('embedded-opentype'),
font-url('fontawesome-webfont.woff') format('woff'),
font-url('fontawesome-webfont.ttf') format('truetype'),
font-url('fontawesome-webfont.svg') format('svg');
font-weight:normal;
font-style:normal;
}
I hope this will help you.
I have a ruby app and it makes a connection to SQL server (works fine) and Postgres (breaking). I don't know how to debug this. I tried connecting to the postgres database from the command line and it worked (without a password actually).
It throws a ActiveRecord::ConnectionNotEstablished error on the first line:
nti_shipment.line_items.each_with_index do |nti_line_item,i|
#logger.info "\n\nadd line item to shipto: "+nti_line_item.botcode+"****"
product = Web::Product.find_by_nti_product_id(nti_line_item.botcode)
#is_message = (i > 0 && (not product)) ? true : false
is_message = (nti_line_item.productid == 0) ? true : false
if !(is_message)
web_line_item = web_shipment.add_line_item(nti_line_item)
last_item = web_line_item
nti_line_item.itemid = web_line_item.id
nti_line_item.save!
elsif i > 0
last_item.line_item_messages << Web::LineItemMessage.add(last_item,nti_line_item)
end
end
And this is the database.yml file I'm using:
production:
adapter: postgresql
database: mysite_production
username: myuser
password: "password"
options: "-o sslmode=require"
host: localhost
This is the full trace:
I, [2013-10-03T10:24:45.034384 #16480] INFO -- : ActiveRecord::ConnectionNotEstablished
I, [2013-10-03T10:24:45.105416 #16480] INFO -- : /usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/connection_specification.rb:145:in `connection'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-sqlserver-adapter-3.2.12/lib/arel/visitors/sqlserver.rb:81:in `engine_activerecord_sqlserver_adapter?'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-sqlserver-adapter-3.2.12/lib/arel/visitors/sqlserver.rb:33:in `order'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/relation/query_methods.rb:279:in `build_arel'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/relation/query_methods.rb:260:in `arel'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/relation.rb:171:in `exec_queries'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/relation.rb:160:in `block in to_a'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/explain.rb:41:in `logging_query_plan'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/relation.rb:159:in `to_a'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/relation/finder_methods.rb:159:in `all'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/associations/collection_association.rb:382:in `find_target'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/associations/collection_association.rb:335:in `load_target'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/associations/collection_proxy.rb:44:in `load_target'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/associations/collection_proxy.rb:87:in `method_missing'
/usr/local/sl-exchange/app/controllers/order_controller.rb:219:in `block (4 levels) in create_web_orders'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/associations/collection_proxy.rb:89:in `each'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/associations/collection_proxy.rb:89:in `method_missing'
/usr/local/sl-exchange/app/controllers/order_controller.rb:194:in `block (3 levels) in create_web_orders'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-sqlserver-adapter-3.2.12/lib/active_record/connection_adapters/sqlserver/database_statements.rb:52:in `block in transaction'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-sqlserver-adapter-3.2.12/lib/active_record/connection_adapters/sqlserver/core_ext/database_statements.rb:37:in `transaction_with_retry_deadlock_victim'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-sqlserver-adapter-3.2.12/lib/active_record/connection_adapters/sqlserver/database_statements.rb:52:in `transaction'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/transactions.rb:208:in `transaction'
/usr/local/sl-exchange/app/controllers/order_controller.rb:167:in `block (2 levels) in create_web_orders'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/activerecord-3.2.14/lib/active_record/transactions.rb:208:in `transaction'
/usr/local/sl-exchange/app/controllers/order_controller.rb:166:in `block in create_web_orders'
/usr/local/sl-exchange/app/controllers/order_controller.rb:164:in `each'
/usr/local/sl-exchange/app/controllers/order_controller.rb:164:in `create_web_orders'
/usr/local/sl-exchange/app/controllers/order_controller.rb:28:in `start'
/usr/local/sl-exchange/lib/exchange.rb:115:in `initialize'
/usr/local/sl-exchange/lib/exchange.rb:194:in `new'
/usr/local/sl-exchange/lib/exchange.rb:194:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons/application.rb:203:in `load'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons/application.rb:203:in `start_load'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons/application.rb:298:in `start'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons/controller.rb:70:in `run'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons.rb:147:in `block in run'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons/cmdline.rb:109:in `call'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons/cmdline.rb:109:in `catch_exceptions'
/usr/local/rvm/gems/ruby-1.9.3-p448/gems/daemons-1.1.9/lib/daemons.rb:146:in `run'
Here are my gems:
** LOCAL GEMS ***
activemodel (3.2.14)
activerecord (3.2.14)
activerecord-postgresql-adapter (0.0.1)
activerecord-sqlserver-adapter (3.2.12)
activesupport (3.2.14)
arel (3.0.2)
bigdecimal (1.1.0)
builder (3.0.4)
bundler (1.3.5)
bundler-unload (1.0.1)
daemons (1.1.9)
i18n (0.6.5)
io-console (0.3)
json (1.5.5)
mailfactory (1.4.0)
mime-types (1.24)
mini_portile (0.5.1)
minitest (2.5.1)
multi_json (1.7.9)
nokogiri (1.6.0)
pg (0.15.1)
rake (10.1.0, 0.9.2.2)
rchardet (1.3.1)
rdoc (3.9.5)
RedCloth (4.2.9)
rubygems-bundler (1.2.2)
rvm (1.11.3.8)
sanitize (2.0.6)
tiny_tds (0.6.1)
tzinfo (0.3.37)
Let me know if you need more info.
===== SQLSERVER CONFIG =====
production:
adapter: sqlserver
host: cluster.mysite.com
database: mydb
#dsn: preview
username: myuser
password: mypwd
port: 1433
when I try telnet cluster.mysite.com 1433 it works... so I don't know what's going on.
Your configuration in database.yml says postgresql, but, your error trace has activerecord-sqlserver-adapter-3.2.12 in it. So, looks like, still you are trying to connect to sqlserver.So, it is not postgres breaking, it is sqlserver breaking.
UPDATE --
I would recommend skipping direct to answer section -- goal of this was to allow multiple subdomains, each of which would have their own users/registrants. A registrant could register on multiple subdomains, however each subdomain is treated independently and unassociated with the others.
I feel this questions is still in need of a better answer so please contribute to it.
===============
ORIGINAL POST --
Help please --
scenario --
My site is used by :teams, each of which has :users. Im trying to enable :users to log in via the :team subdomain. (unique USER index keys are :email and :team_id -- the subdomain is part of a separate TEAM model that im trying to associate by :team_id in the user model during signin.)
TEAM MODEL
has_many :users
USER MODEL
devise request_keys: [:team_id]
belongs_to :team
def self.find_for_authentication(warden_conditions)
where(:email => warden_conditions[:email], :team_id => warden_conditions[:team_id]).first
end
this is per the new instruction on devise wiki: https://github.com/plataformatec/devise/wiki/How-to:-Scope-login-to-subdomain
APPLICATION CONTROLLER
I use before_action to set the team based on subdomain
I also add the strong params the "lazy" way for team_id / devise_parameter_sanitizer.for(:sign_in) << :team_id
DEVISE SESSIONS NEW VIEW (For USERS)
I feel dirty doing this, but I have a hidden team_id input field
AND THE ERROR DUMP NoMethodError undefined method team_id
Started POST "/users/sign_in" for 111.0.0.1 at 2013-09-13 13:08:09 -0400
Processing by Devise::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"LONG TOKEN HERE=", "user"=>{"email"=>"user#site.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "team_id"=>"16", "commit"=>"Sign in"}
[1m[35mTeam Load (0.2ms)[0m SELECT "teams".* FROM "teams" WHERE "teams"."subdomain" = 'teamname' LIMIT 1
Completed 500 Internal Server Error in 119ms
NoMethodError (undefined method `team_id' for #<ActionDispatch::Request:0x007ffe950c2150>):
devise (3.1.0) lib/devise/strategies/authenticatable.rb:142:in `block in request_values'
devise (3.1.0) lib/devise/strategies/authenticatable.rb:142:in `map'
devise (3.1.0) lib/devise/strategies/authenticatable.rb:142:in `request_values'
devise (3.1.0) lib/devise/strategies/authenticatable.rb:122:in `with_authentication_hash'
devise (3.1.0) lib/devise/strategies/authenticatable.rb:71:in `valid_for_params_auth?'
devise (3.1.0) lib/devise/strategies/authenticatable.rb:16:in `valid?'
warden (1.2.3) lib/warden/proxy.rb:351:in `block in _run_strategies_for'
warden (1.2.3) lib/warden/proxy.rb:349:in `each'
warden (1.2.3) lib/warden/proxy.rb:349:in `_run_strategies_for'
warden (1.2.3) lib/warden/proxy.rb:319:in `_perform_authentication'
warden (1.2.3) lib/warden/proxy.rb:127:in `authenticate!'
devise (3.1.0) app/controllers/devise/sessions_controller.rb:15:in `create'
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (4.0.0) lib/active_support/callbacks.rb:463:in `_run__412684316733059520__process_action__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument'
activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process'
actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process'
actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/mapper.rb:44:in `call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call'
warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
warden (1.2.3) lib/warden/manager.rb:34:in `catch'
warden (1.2.3) lib/warden/manager.rb:34:in `call'
rack (1.5.2) lib/rack/etag.rb:23:in `call'
rack (1.5.2) lib/rack/conditionalget.rb:35:in `call'
rack (1.5.2) lib/rack/head.rb:11:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
activerecord (4.0.0) lib/active_record/migration.rb:369:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__1066722413265567725__call__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:145:in `handle'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:99:in `rescue in block (2 levels) in start'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:96:in `block (2 levels) in start'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:86:in `each'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:86:in `block in start'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:66:in `loop'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:66:in `start'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/lib/nack/server.rb:13:in `run'
/Users/Home/Library/Application Support/Pow/Versions/0.4.1/node_modules/nack/bin/nack_worker:4:in `<main>'
Help is much appreciated. Thanks!
Here is how i resolved --
I followed the instructions here exactly: https://github.com/plataformatec/devise/wiki/How-to:-Scope-login-to-subdomain
To use these instructions i added the subdomain column to the users table (creating a lot of duplicate subdomains since each team has_many users).
Then in my Team controller when i update a team subdomain it also creates a query to gather all the users associated with the team to update their subdomain values as well. Not the ideal fix but works well enough.
UPDATE
I hope someone finds a better way -- in mean time i'll make a small addition to this. in order for the same email to work across multiple subdomains you need to add the below in your user model. Otherwise the same email will only be registered for 1 subdomain and any registrations on other subdomains will give you the email is already registered error.
validates_uniqueness_of :email, :scope => :subdomain
For this to work you need to remove :validatable from the devise options in your user model and create your own custom validations for email and passwords.
It's not necessary to add column "subdomain" in DB-table. For example in my case I need provide authentication from "www" only for clients, and from "account" only for partners.
def self.find_for_authentication(conditions)
subdomain = conditions.delete(:subdomain)
if user = super
case subdomain
when 'www'
user.client? ? user : nil
when 'account'
user.partner? ? user : nil
else
nil
end
end
end
I guess this approach more simple.
I believe this is actually a bug related to a change in the way ActionDispatch::Request works.
Devise seems to be assuming that if it calls a key on the request hash it will get nil if the value doesn't exist and will get the value otherwise.
It attempts to access the request with .send which doesn't seem to work in the current version of rails. If you patch devise like so:
diff --git a/lib/devise/strategies/authenticatable.rb b/lib/devise/strategies/authenticatable.rb
index 13249e8..df28fc9 100644
--- a/lib/devise/strategies/authenticatable.rb
+++ b/lib/devise/strategies/authenticatable.rb
## -148,7 +148,7 ## module Devise
def request_values
keys = request_keys.respond_to?(:keys) ? request_keys.keys : request_keys
- values = keys.map { |k| self.request.send(k) }
+ values = keys.map { |k| self.request[k] }
Hash[keys.zip(values)]
end
it seems to work fine.
Edit: I wrote up a partial patch with a few more details here:
https://github.com/plataformatec/devise/pull/3965
I have just created a controller using the command:
rails generate controller LegacyPlanCalculator index process
and then I added this to my routes.rb file:
match "legacy_plan_calculator" => "legacy_plan_calculator#index"
match "/legacy_plan_calculator/process" => "legacy_plan_calculator#process"
I can see the controller and its views in the project. The actions in the controller are empty obviously:
class LegacyPlanCalculatorController < ApplicationController
def index
end
def process
end
end
But when I try to goto: http://localhost:3000/legacy_plan_calculator I get this error:
wrong number of arguments (1 for 0)
Rails.root: C:/Users/saadr/Dropbox/workspace/gps4money
I want to be able to land on the index view of the legacy plan calculator when the user puts in localhost:3000/legacy_plan_calculator
UPDATE: Here are the first few lines from 'Full Trace' on the error page:
actionpack (3.1.0) lib/action_controller/metal.rb:193:in `process'
actionpack (3.1.0) lib/action_controller/metal.rb:193:in `dispatch'
actionpack (3.1.0) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.1.0) lib/action_controller/metal.rb:236:in `action'
actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:65:in `call'
actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:65:in `dispatch'
actionpack (3.1.0) lib/action_dispatch/routing/route_set.rb:29:in `call'
And I don't know where these files are located so can't post relevant code from these files.
process is a reserved word, just change it to any other and it will work.