it-swarm.com.de

Heroku "Es tut uns leid, aber etwas ist schief gelaufen"

Erstens bin ich ein ziemlich neuer Neuling in Rails/Heroku, also verzeihen Sie dem Neuling im Voraus!

Ich habe das Rails-Tutorial (http://guides.rubyonrails.org/getting_started.html) durchgeführt und eine blogähnliche "Post" -App erstellt, in github und dann in heroku gepusht.

Meine App funktioniert lokal einwandfrei, aber wenn ich versuche, sie online auszuführen, hat sie die Fehlermeldung "Es tut uns leid, aber etwas ist schiefgegangen".

Hier sind die Heroku-Protokolle:

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]: 

Kurz gesagt, ist f.name ein Objekt, das einen Eintrag in der Datenbank darstellt (so wie die meisten Informationen für f).

Der Fehler "undefined method name" erscheint mir seltsam, da er lokal einwandfrei funktioniert.

Meine Hypothese ist, dass die Datenbank zwischen heroku und meiner App nicht richtig verlinkt ist. Ich weiß jedoch nicht, wie ich dieses Problem lösen/prüfen kann.

Meine App verwendet jetzt standardmäßig die "freigegebene Datenbank".

Irgendwelche Hinweise auf was zu überprüfen? Etwas was ich vermisst habe?

EDIT 1: Migration der Datenbank. Die Tabelle "Beiträge" scheint bereits "erkannt" zu sein. Hier ist eine Spur:

   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: Versucht, die Datenbank zu löschen. Merkwürdiger Fehler:

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: CreatePosts-Migration (von 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

Es stellte sich heraus, dass meine Datenbank in Heroku falsch referenziert wurde. Das habe ich getan:

  1. rake db: drop - tötete sowohl Test- als auch Entwicklungstabellen
  2. erstellt die beiden Datenbanken in posgresql ich habe es auch lokal
  3. rake db: migrate - Damit funktioniert localhost nach 1 wieder.
  4. heroku addons - shared-database sollte angezeigt werden
  5. heroku pg: reset SHARED_DATABASE - kann nicht db: reset in heroku aufgrund von Berechtigungsproblemen
  6. heroku Run Rake db: migrate - re-migriere die Produktions-Db

Obwohl nur die Schritte 5 und 6 die einzigen waren, die mein primäres Problem direkt angesprochen haben.

Danke euch allen !!!

19
mhz

Haben Sie Ihre Datenbank migriert? 

Laufen Sie mal: 

heroku run rake db:migrate 

aus dem Verzeichnis Ihres Projekts.

50
YuKagi

Anscheinend haben Sie mehr als eine Migration, um das Modell post zu erstellen. Ich würde zuerst die Migrationen betrachten.

0
Dty