2012-07-31 10 views
22

Tôi có ứng dụng Rails 3 với MongoID 3 được triển khai thành công Heroku (sử dụng MongoHQ) - nhưng sau đó một cái gì đó đã xảy ra (không thể xác định chính xác nó là gì) và xây dựng bắt đầu đâm vào Heroku.Heroku & MongoHQ: ActionView :: Mẫu :: Lỗi (Thao tác: # <Moped :: Giao thức :: Lệnh :: Xác thực không thành công với lỗi "auth failed")

Vì vậy, đây là lỗi tôi nhận được:

TLDR:Moped::Errors::AuthenticationFailure (The operation: #<Moped::Protocol::Commands::Authenticate ... failed with error "auth fails")

gì làm cho điều này khó khăn hơn để gỡ lỗi là nó chỉ làm việc tốt trên localhost. Bây giờ tôi đang hết ý tưởng về điều này.

app[web.1]: >> Thin web server (v1.4.1 codename Chromeo) 
app[web.1]: >> Maximum connections set to 1024 
app[web.1]: >> Listening on 0.0.0.0:58731, CTRL+C to stop 
heroku[web.1]: State changed from starting to up 
app[web.1]: 
app[web.1]: 
app[web.1]: Started GET "/" for 212.86.9.90 at 2012-07-31 08:08:07 +0000 
heroku[router]: GET cool-name-123.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=171ms status=200 bytes=1286 
heroku[router]: GET cool-name-123.herokuapp.com/assets/application-8e7bfeeffc9291864e5b42d908c2fdda.css dyno=web.1 queue=0 wait=0ms service=11ms status=200 bytes=92524 
heroku[router]: GET cool-name-123.herokuapp.com/assets/application-aa557bde70f1236cdf90c913043c4382.js dyno=web.1 queue=0 wait=0ms service=16ms status=200 bytes=122836 
heroku[router]: GET cool-name-123.herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=3ms status=200 bytes=0 
app[web.1]: 
app[web.1]: 
app[web.1]: Started GET "/originals/new" for 212.86.9.90 at 2012-07-31 08:08:11 +0000 
heroku[router]: GET cool-name-123.herokuapp.com/originals/new dyno=web.1 queue=0 wait=0ms service=31ms status=200 bytes=1808 
app[web.1]: 
app[web.1]: 
app[web.1]: Started POST "/originals" for 212.86.9.90 at 2012-07-31 08:08:34 +0000 
app[web.1]: 
app[web.1]: Moped::Errors::AuthenticationFailure (The operation: #<Moped::Protocol::Commands::Authenticate 
app[web.1]: @length=154 
app[web.1]: @request_id=3 
app[web.1]: @response_to=0 
app[web.1]: @op_code=2004 
app[web.1]: @flags=[] 
app[web.1]: @full_collection_name="app123.$cmd" 
app[web.1]: @limit=-1 
app[web.1]: @skip=0 
app[web.1]: @selector={:authenticate=>1, :user=>"heroku", :nonce=>"xyz", :key=>"xyz"} 
heroku[router]: POST cool-name-123.herokuapp.com/originals dyno=web.1 queue=0 wait=0ms service=1486ms status=500 bytes=643 
app[web.1]: @fields=nil> 
app[web.1]: failed with error "auth fails"): 
app[web.1]: app/controllers/originals_controller.rb:19:in `block in create' 
app[web.1]: app/controllers/originals_controller.rb:18:in `create' 
app[web.1]: 
app[web.1]: 
heroku[router]: GET cool-name-123.herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=3ms status=304 bytes=0 
app[web.1]: 
app[web.1]: 
app[web.1]: Started GET "/" for 212.86.9.90 at 2012-07-31 08:09:40 +0000 
heroku[router]: GET cool-name-123.herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=11ms status=304 bytes=0 

tôi vừa mới phải vật lộn với Heroku, và kết quả là tôi nghĩ rằng tôi nên có các thiết lập chính xác cho sự lựa chọn của trình điều khiển db & dịch vụ (sử dụng sơ đồ yml mới + của Ruby 1.9.3 trong Gemfile) .

Khi tôi chạy heroku config --app app_name tôi nhận được

DATABASE_URL  => postgres://rhalppyjrb:[email protected]/rhalppyjrb 
GEM_PATH   => vendor/bundle/ruby/1.9.1 
LANG    => en_US.UTF-8 
MONGOHQ_URL   => mongodb://heroku:[email protected]:27054/app123 
PATH    => bin:vendor/bundle/ruby/1.9.1/bin:/usr/local/bin:/usr/bin:/bin 
RACK_ENV   => production 
RAILS_ENV   => production 
SHARED_DATABASE_URL => postgres://rhalppyjrb:[email protected]/rhalppyjrb 

mongoid.yml của tôi trông như thế này:

production: 
    sessions: 
    default: 
      uri: <%= ENV['MONGOHQ_URL'] %> 
      options: 
      consistency: :strong 
      skip_version_check: true 
      safe: true 

Gemfile là như thế này:

source 'https://rubygems.org' 

gem 'bundler', '1.2.0.rc' 

ruby '1.9.3' 

gem 'rails', '3.2.6' 
gem 'thin' 
gem 'rmagick', :require => 'RMagick' 
gem "carrierwave-mongoid", :git => "git://github.com/jnicklas/carrierwave-mongoid.git", :branch => "mongoid-3.0", :require => 'carrierwave/mongoid' 

group :assets do 
    gem 'sass-rails', '~> 3.2.3' 
    gem 'coffee-rails', '~> 3.2.1' 
    gem 'uglifier', '>= 1.0.3' 
    gem "therubyracer", :platform => :ruby 
end 

gem 'jquery-rails' 
gem "haml", ">= 3.1.6" 
gem "mongoid", ">= 3.0.3" 
gem "devise", ">= 2.1.2" 
gem "devise_invitable", ">= 1.0.2" 
gem "cancan", ">= 1.6.8" 
gem "rolify", ">= 3.1.0" 
gem "bootstrap-sass", ">= 2.0.4.0" 
gem "simple_form" 

group :development do 
    gem "guard", ">= 0.6.2" 
    gem 'rb-fsevent' 
    gem 'growl' 
    gem "haml-rails", ">= 0.3.4" 
    gem "guard-bundler", ">= 0.1.3" 
    gem "guard-rails", ">= 0.0.3" 
    gem "guard-livereload", ">= 0.3.0" 
    gem "guard-rspec", ">= 0.4.3" 
end 

group :test do 
    gem "database_cleaner", ">= 0.8.0" 
    gem "mongoid-rspec", "1.4.6" 
    gem "email_spec", ">= 1.2.1" 
end 

group :development, :test do 
    gem "factory_girl_rails", ">= 3.5.0" 
    gem "rspec-rails", ">= 2.11.0" 
end 
+0

Bạn có kết nối thành công với việc sử dụng MongoHQ_URL với ứng dụng khách mongo không? – shingara

+0

Chỉ có cùng một vấn đề chính xác. Tất cả mọi thứ đã được tốt, tôi chạy db: reseed để trống cơ sở dữ liệu để kiểm tra một cái gì đó, bây giờ nhận được lỗi này. Không thể tìm ra điều gì sai. Mọi thứ hoạt động tốt trên localhost, và kết nối mongo của tôi trong sản xuất vẫn ổn cho đến năm phút trước. – odigity

+0

Bạn đã tìm ra? – Nerian

Trả lời

20

Vấn đề là xác thực của bạn thông tin đăng nhập không còn chính xác nữa. Cụ thể, người dùng bạn đang cố xác thực không còn tồn tại nữa.

Lý do là khi bạn thực hiện rake db:reseed tất cả dữ liệu sẽ bị xóa, bao gồm cả người dùng cấp DB.

Ví dụ:

➜ skadi git:(master) ✗ mongo   
    MongoDB shell version: 2.0.7 
    connecting to: test 
    > use skadi_development 
    switched to db skadi_development 
    > db.system.users.find() 
    > db.addUser("joe", "passwordForJoe") 
    { "n" : 0, "connectionId" : 191, "err" : null, "ok" : 1 } 
    { 
    "user" : "joe", 
    "readOnly" : false, 
    "pwd" : "dac588613249fe92703afb262ec53b82", 
    "_id" : ObjectId("5030d5181cefbd2b04a99e30") 
    } 
    > db.system.users.find() 
    { "_id" : ObjectId("5030d5181cefbd2b04a99e30"), "user" : "joe", "readOnly" : false, "pwd" : "dac588613249fe92703afb262ec53b82" } 
    > exit 
    bye 

    ➜ skadi git:(master) ✗ rake db:reseed 

    ➜ skadi git:(master) ✗ mongo   
    MongoDB shell version: 2.0.7 
    connecting to: test 
    > use skadi_development 
    switched to db skadi_development 
    > db.system.users.find() 
    => Nothing 

Vì vậy, bạn khi bạn cố gắng kết nối với cơ sở dữ liệu, thông tin của bạn không còn giá trị.

Bạn có thể kiểm tra điều đó trong bảng quản trị MongoHQ của bạn. Bạn có thể tìm thấy nó bằng cách vào Heroku, chọn ứng dụng của bạn, nhấp vào tài nguyên và nhấp vào MongoHQ. Sau đó nhấp vào tab Người dùng cơ sở dữ liệu.

rake db:reseed được sử dụng để hoạt động như bạn mong đợi, nhưng nó đã thay đổi với phiên bản mới của mongoid. Để xóa tất cả các bộ sưu tập, ngoại trừ hệ thống. *, Bạn có thể sử dụng rake db:purge.

Bạn có thể cần phải sử dụng nhánh chính vì nhiệm vụ cào đó chưa có sẵn trong phiên bản ổn định. Hoặc chỉ sử dụng Mongoid.purge! trong mã của bạn, hoạt động ổn định.

Chi tiết: https://github.com/mongoid/mongoid/issues/2275

+0

Điều này đã hiệu quả; đã phải thêm lại người dùng được mong đợi. –

+0

cũng hoạt động cho tôi. Cảm ơn! – okysabeni

+0

Hoàn hảo, làm việc như sự quyến rũ!Cảm ơn – RSB