web-dev-qa-db-fra.com

Heroku "Nous sommes désolés, mais quelque chose s'est mal passé"

Tout d'abord, je suis un débutant dans Rails/heroku, alors pardonnez-nous à l'avance!

J'ai suivi le didacticiel Rails (http://guides.rubyonrails.org/getting_started.html) et généré une application de type "post" ressemblant à un blog, puis intégrée dans github, puis dans heroku.

Mon application fonctionne correctement localement, mais lorsque j'essaie de l'exécuter en ligne, le message d'erreur "Nous sommes désolés, mais quelque chose s'est mal passé" s'affiche en rouge.

Voici les journaux de heroku:

2012-06-17T18:20:21+00:00 app[web.1]: Started GET "/posts/new" for 24.246.75.91 at 2012-06-17 18:20:21 +0000
2012-06-17T18:20:21+00:00 app[web.1]: Processing by PostsController#new as HTML
2012-06-17T18:20:21+00:00 app[web.1]:   Rendered posts/_form.html.erb (19.4ms)
2012-06-17T18:20:21+00:00 app[web.1]:   Rendered posts/new.html.erb within layouts/application (32.8ms)
2012-06-17T18:20:21+00:00 app[web.1]: Completed 500 Internal Server Error in 39ms
2012-06-17T18:20:21+00:00 app[web.1]: 
2012-06-17T18:20:21+00:00 app[web.1]:     13: 
2012-06-17T18:20:21+00:00 app[web.1]: ActionView::Template::Error (undefined method `name' for #<Post:0x000000043b8e00>):
2012-06-17T18:20:21+00:00 app[web.1]:     14:   <div class="field">
2012-06-17T18:20:21+00:00 app[web.1]:     15:     <%= f.label :name %><br />
2012-06-17T18:20:21+00:00 app[web.1]:     18:   <div class="field">
2012-06-17T18:20:21+00:00 app[web.1]:     17:   </div>
2012-06-17T18:20:21+00:00 app[web.1]:     16:     <%= f.text_field :name %>
2012-06-17T18:20:21+00:00 app[web.1]:     19:     <%= f.label :title %><br />
2012-06-17T18:20:21+00:00 app[web.1]:   app/views/posts/_form.html.erb:16:in `block in _app_views_posts__form_html_erb___4393344465537738631_33651200'
2012-06-17T18:20:21+00:00 app[web.1]:   app/views/posts/_form.html.erb:1:in `_app_views_posts__form_html_erb___4393344465537738631_33651200'
2012-06-17T18:20:21+00:00 app[web.1]:   app/views/posts/new.html.erb:3:in `_app_views_posts_new_html_erb___263954971377171473_37473500'
2012-06-17T18:20:21+00:00 app[web.1]:   app/controllers/posts_controller.rb:35:in `new'
2012-06-17T18:20:21+00:00 app[web.1]: 

En bref, f.name est un objet représentant une entrée dans la base de données (ainsi que la plupart des informations sur f).

L'erreur "méthode indéfinie` nom '"me semble étrange, car elle fonctionne parfaitement localement.

Mon hypothèse est que la base de données n’est pas correctement reliée entre heroku et mon application. Cependant, je ne sais pas comment résoudre ce problème/le vérifier.

Mon application utilise actuellement la "base de données partagée" par défaut.

Des indices sur quel chèque? Quelque chose m'a manqué?

EDIT 1: Migration de la base de données. La table 'posts' semble déjà être 'détectée'. Voici une trace:

   Running rake db:migrate --trace attached to terminal... up, run.1
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/Rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/Rakefile:7)
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/Rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/Rakefile:7)
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Invoke Rails_env (first_time)
** Execute Rails_env
** Execute db:load_config
** Execute db:migrate
Migrating to CreatePosts (20120418005214)
==  CreatePosts: migrating ====================================================
-- create_table(:posts)
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  relation "posts" already exists
: CREATE TABLE "posts" ("id" serial primary key, "name" character varying(255), "title" character varying(255), "content" text, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL) 
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:640:in `async_exec'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:640:in `block in execute'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:280:in `block in log'
/app/vendor/bundle/Ruby/1.9.1/gems/activesupport-3.2.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:275:in `log'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:639:in `execute'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:170:in `create_table'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:450:in `block in method_missing'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:424:in `block in say_with_time'
/app/vendor/Ruby-1.9.3-p0/lib/Ruby/1.9.1/benchmark.rb:280:in `measure'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:424:in `say_with_time'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:444:in `method_missing'
/app/db/migrate/20120418005214_create_posts.rb:3:in `change'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:393:in `block (2 levels) in migrate'
/app/vendor/Ruby-1.9.3-p0/lib/Ruby/1.9.1/benchmark.rb:280:in `measure'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:393:in `block in migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:118:in `with_connection'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:377:in `migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:512:in `migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:704:in `block (2 levels) in migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:759:in `call'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:759:in `block in ddl_transaction'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:190:in `transaction'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/transactions.rb:208:in `transaction'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:759:in `ddl_transaction'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:703:in `block in migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:684:in `each'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:684:in `migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:554:in `up'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/migration.rb:535:in `migrate'
/app/vendor/bundle/Ruby/1.9.1/gems/activerecord-3.2.1/lib/active_record/railties/databases.rake:153:in `block (2 levels) in <top (required)>'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/app/vendor/Ruby-1.9.3-p0/lib/Ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/app/vendor/bundle/Ruby/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/app/vendor/bundle/Ruby/1.9.1/bin/rake:19:in `load'
/app/vendor/bundle/Ruby/1.9.1/bin/rake:19:in `<main>'
Tasks: TOP => db:migrate

EDIT 2: Essayé de laisser tomber la base de données. Erreur étrange:

19:06:34[~/ED3/ed3/]>heroku run rake db:drop
Running rake db:drop attached to terminal... up, run.1
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/Rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/Rakefile:7)
DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/01/04/Rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /app/Rakefile:7)
Couldn't drop mtstktqkyx : #<ActiveRecord::StatementInvalid: PG::Error: ERROR:  must be owner of database mtstktqkyx
: DROP DATABASE IF EXISTS "mtstktqkyx">

EDIT 3: migration CreatePosts (à partir de db/migrate /##..##_ create_posts.rb)

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :name
      t.string :title
      t.text :content

      t.timestamps
    end
  end
end
23
mhz

Il s'avère que ma base de données dans heroku a été mal référencée. Voici ce que j'ai fait:

  1. rake db: drop - cela a tué les tables de test et de développement
  2. re-créé les deux bases de données dans posgresql je l'ai aussi local
  3. rake db: migrate - donc, à ce stade, localhost fonctionne à nouveau après 1.
  4. heroku addons - shared-database devrait être affiché
  5. heroku pg: reset SHARED_DATABASE - ne peut pas faire la base de données: reset dans heroku en raison de problèmes de permission
  6. heroku exécuter rake db: migrer - remigrer la base de production

Bien que seules les étapes 5 et 6 aient été les seules à traiter directement de mon problème principal.

Merci a tous!!!

19
mhz

Avez-vous migré votre base de données? 

Essayez de courir: 

heroku run rake db:migrate 

à partir du répertoire de votre projet.

50
YuKagi

Il semble que vous ayez plus d'une migration pour créer le modèle post. Je regarderais d'abord les migrations.

0
Dty