0

私はその機能のいくつかのためにajaxベースである非常に単純なrailsアプリケーションを持っています。開発環境から使用している場合、すべてが期待どおりに実行されます。ただし、本番環境では奇妙なことが起こります。ajax呼び出しが行われると、js(コーヒーベース)ではなくHTML(HAMLベース)レイアウトがレンダリングされます。

本番環境と開発環境のログを比較すると、応答の処理方法に問題があることは明らかですが、手がかりがないまま何時間も頭を悩ませてきました。

私のリクエストが次のようになっているとしましょう:/software_tags/1/edit.js開発ログで、私は見ることができます(そして出力は正しいです、私は期待されるjavascriptページを取得します):

Started GET "/software_tags/1/edit.js" for 127.0.0.1 at 2012-07-17 16:59:34 -0700
Processing by SoftwareTagsController#edit as JS
  Parameters: {"id"=>"1"}
  Rendered shared/_error_messages.haml (0.1ms)
  Rendered software_tags/_form.haml (4.5ms)
  Rendered software_tags/edit.js.coffee (5.7ms) <---- THIS IS GOOD!
Completed 200 OK in 10ms (Views: 8.1ms | ActiveRecord: 0.4ms)

ただし、開発ログには次のように表示されます(出力が間違っていると、HTMLページが表示されます)。

Started GET "/software_tags/1/edit.js" for x.x.x.x at 2012-07-18 01:59:54 +0200
Processing by SoftwareTagsController#edit as JS <--- Wouldn't that force the edit.js.coffee to be rendered instead of the edit.haml?
  Parameters: {"id"=>"1"}
  Rendered shared/_error_messages.haml (0.1ms)
  Rendered software_tags/_form.haml (2.8ms)
  Rendered software_tags/edit.haml (3.2ms)      <---- THIS IS WRONG!
Completed 200 OK in 5ms (Views: 3.5ms | ActiveRecord: 0.5ms)

私のコントローラーでは、編集アクションは次のようになります。

  def edit
    respond_to do |format|
      format.js
      format.html
      format.json { render json: @software_tag }
    end
  end

ただし、jsonデータにアクセスしようとすると、すべての環境ですべてが正常に機能するため、js出力の出力が間違っている場合の問題は何でしょうか。

編集:たぶん私はかなり単純なものが欠けています。私はまだ、本番環境から開発で機能していることを達成することができません。Rails3.2.6でruby1.9.3を、jQuery/jQuery-ujsとともに使用しています。基本的に、私は私の質問を洗練します:link_to remote:trueを作成するとき、サーバーにjavascriptファイル(およびhtmlファイルの代わりにrespond_to.jsブロックで分岐)で応答するように強制するにはどうすればよいですか?

4

3 に答える 3

5

が:assetsグループ内のgemである場合、このgemはアセットディレクトリ(app、vendor、lib)でのみ使用され、ビューでは使用されません。

正常に動作するには、次の3つの方法があります。

  1. コーヒーレールを資産の外に移動する
  2. apllication.rbでこれをコメント解除します:# Bundler.require(:default, :assets, Rails.env)
  3. gemcoffee-viewsを使用するhttps://github.com/yury/coffee-views
于 2012-07-18T14:02:01.340 に答える
1

私はついに私の質問に対する答えを見つけました。それは私にはバグのように聞こえるか、あるいは何かが足りないのかもしれません。

私はこのように私のコントローラーにデバッグメッセージを置きました:

def edit
  respond_to do |format|
    format.js { Rails.logger.info "in JS handler" }
    format.html { Rails.logger.info "in HTML handler" }
    format.json { render json: @software_tag }
  end
end

実際、正しいアクションが呼び出されましたが、format.jsブロック内にある場合でも、ファイルedit.hamlがedit.js.coffeの代わりにレンダリングされました。

私が見つけた解決策は、次のように、gem'coffee-rails'をgemfileから:assetsグループの外に移動することです。

group :assets do
  gem 'uglifier'
  gem 'sass-rails'
  gem 'coffee-rails'
end

後:

gem 'coffee-rails'
group :assets do
  gem 'uglifier'
  gem 'sass-rails'
end

これで、すべてが本番環境で期待どおりに機能しています。

助けてくれてありがとう!

于 2012-07-18T08:42:45.740 に答える
-1

やってみました:

respond_to :js, :only => :edit

コントローラーの上部にありますか?

または、jsonブロックで行っているのと同じ方法で、format.jsブロックでテンプレートレンダリングを指定します。

于 2012-07-18T05:33:38.650 に答える