0

Railsアプリのユーザーインデックスページにユーザーのリストがあり、ログインしているユーザーは、名前の横にある[フレンドシップを開始]ボタンをクリックして、別のユーザーとフレンドシップを開始できるという考えです。これにより、フレンドシップ テーブルにレコードが追加されます。

ローカルでホストされている場合、プロセスは完全に機能します。これは SQLite を使用しており (データベースの問題ではないと思いますが)、ログは次のようになります。

Started POST "/friendships" for 127.0.0.1 at 2013-01-25 12:48:16 +0000
Processing by FriendshipsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"P5qQAuaSD1SNkgLDI6yQ2h9GhJjAub7l7On3+ZGBwiY=", "friendship"=>{"befriended_id"=>"16"}, "commit"=>"Start Friendship"}
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" = 'eL_PfKhO9ZnYTxXTPo9UiQ' LIMIT 1
User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1  [["id", "16"]]
(0.0ms)  begin transaction
SQL (0.6ms)  INSERT INTO "friendships" ("befriended_id", "befriender_id", "confirmed", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?)  [["befriended_id", 1], ["befriender_id", 16], ["confirmed", false], ["created_at", Fri, 25 Jan 2013 12:48:16 UTC +00:00], ["updated_at", Fri, 25 Jan 2013 12:48:16 UTC +00:00]]
(1.4ms)  commit transaction
Redirected to http://localhost:3000/users
Completed 302 Found in 9ms (ActiveRecord: 2.3ms)

ただし、(PostgreSQL を使用して) Heroku でホストしているバージョンのアプリで同じことを行うと、悪名高い「申し訳ありませんが、問題が発生しました (500)」というエラーが表示されます。ログを調べると、そこにないビューを探しているようですが、なぜそれを探しているのかわかりません。ログは次のとおりです。

2013-01-25T12:45:39+00:00 app[web.1]: Started POST "/friendships" for 79.97.21.43 at 2013-01-25 12:45:39 +0000
2013-01-25T12:45:39+00:00 heroku[router]: at=info method=POST path=/friendships host=meetflag.herokuapp.com fwd=79.97.21.43 dyno=web.1 queue=0 wait=0ms connect=1ms service=135ms status=500 bytes=643
2013-01-25T12:45:39+00:00 app[web.1]: 
2013-01-25T12:45:39+00:00 app[web.1]: ActionView::MissingTemplate (Missing template friendships/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
2013-01-25T12:45:39+00:00 app[web.1]:   * "/app/app/views"
2013-01-25T12:45:39+00:00 app[web.1]: ):

--- (then there's the list of where it's looked) ---

2013-01-25T12:45:39+00:00 app[web.1]: Processing by FriendshipsController#create as HTML
2013-01-25T12:45:39+00:00 app[web.1]:   Parameters: {"utf8"=>"✓",  "authenticity_token"=>"n+LI+Br3ahg5FxhNUm2u0b5YcqZGKpfeK7c3vJLkMyU=", "friendship"=>{"befriended_id"=>"2"}, "commit"=>"Start Friendship"}
2013-01-25T12:45:39+00:00 app[web.1]: Completed 500 Internal Server Error in 86ms

データベースまで到達していないようです。私はアセットからCoffee-Rails gemをGemfileの本体に移動しようとしました(ここで言及されているように)、haml gemはまったくありません(ここで言及されているように)、私のrake dbのものは正しいようです(ここで言及)。

Friendship コントローラーは次のようになります。

class FriendshipsController < ApplicationController
    before_filter :signed_in_user, only: [:create, :update, :destroy]
    respond_to :html, :js

    def create
        @user = User.find(params[:friendship][:befriended_id])
        @user.start_friendship!(current_user)
        respond_with(@user, location: request.referer)
    end

    def destroy
        @user = Friendship.find(params[:id]).befriended
        current_user.end_friendship!(@user)
        respond_with(@user, location: request.referer)
    end

    def update
        @user = Friendship.find(params[:id]).befriended
        current_user.confirm_friendship!(@user)
        respond_with(@user, location: request.referer)
    end
end

何がうまくいかないのか、それを修正する方法を知っている人はいますか? アプリケーションの残りの部分は正常に動作します!

ご協力いただきありがとうございます。

アップデート

更新を提供するために-PostgreSQLをローカルにインストールして、それが何かに関係していないことを確認しました。そうではありませんでした。本番環境であっても、ローカルでホストされている場合はすべて機能します。私が言うように、問題はデータベース部分にさえ到達していないという事実にあると思います。

さらに更新

問題は、レンダリングするビューがないビューをレンダリングしようとしているようです。/app/views/friendships/ にある .js.erb ファイルを削除して、ボタンで Ajax を使用できるようにしましたが、うまくいきません (今のところ、Ajax なしで十分満足しています)。 . .html.erb ビューを配置することもできますが、それは必要ありません (ユーザー インデックス ページに戻りたいだけです)。他の解決策が思いつかない場合は、それが機能するかどうかを確認するだけです。

PS 以前のコントローラーをリファクタリングしたので、新しいバージョンを上に示します。

4

1 に答える 1

1

確かに、私はそれを機能させましたが、少なくとも私の考えでは、それが現在機能し、以前は機能していなかったという正当な理由はありません.

動作させるために、次の行を追加して、 production.rb ファイルでデバッグレベルのログを有効にしました。

config.log_level = :debug
config.cache_classes = false                                                                                                                                                 
config.action_controller.perform_caching = false

config.cache_classes = true(ファイルの先頭にある を必ず変更してください)

putsそしていくつかのステートメントをコントローラーに投げました:

puts "Current user:" + current_user.name
puts "@user: " + @user.name
puts "Start Friendship called. Referrer: " + request.referer

(私はいくつかの情報を取得しようとしていました)。

驚くべきことに、それは機能します。誰かがこれがなぜなのか考えているなら、ここに投稿してください。私はそれを喜んでいます!

于 2013-01-26T16:58:42.310 に答える