4

Rails 3.0.3 を devise などの gem と組み合わせて使用​​すると、フラッシュ メッセージが表示されません。これは、認証に使用される Cookie を制御するためです。

サブドメインを使用しているため、Rails アプリケーションは少し特殊です。彼らがすることは、ユーザーが閲覧している会社をアプリケーションに伝えることです。例: mycompany.theapp.com/projects/3/ <- 会社「mycompany」のプロジェクト 3。
ユーザーがログインすると、theapp.com/overview <- 非サブドメイン
そこにあるすべての通知が表示されるのに、なぜサブドメイン ページに表示されないのでしょうか?

したがって、これはサブドメイン ページで使用されるコードです。サブドメイン以外のページに配置する場合とまったく同じです。コントローラーのコード:

def update
  redirect_to [@project], :notice => "Project #{@project.name} updated."
end

layouts/application.html.erb

<% flash.each do |type, message| %>
  <%= content_tag :div, message, :class => "flash #{type}" %>
<% end %>

また、何が起こっているのかを把握しようとして、以下を追加しました。

flash.to_yaml
# Result: --- !map:ActionDispatch::Flash::FlashHash {} 

どうやらdeviseはflash[:notice]を使用しているので、私もそれを試しました(deviseで機能していたため)。

flash[:notice] = "Project #{@project.name} updated."
# Result: --- !map:ActionDispatch::Flash::FlashHash {} 

通知は、サブドメインにうまく転送されない Cookie またはセッション データによって送信されますか? プロジェクトの編集フォームは mycompany.theapp.com/projects/3/edit/ にあり、mycompany.theapp.com
/projects/3/ に送信されます (通知なし)

「レールサーバー」を備えたUbuntu 10.10、nginxを使用したパッセンジャー、さらにはMacマシンでも発生します(ただし、他の誰かがテストしました)。

誰でも推測できますか?

4

1 に答える 1

6

どうやら、構成に問題はなかったようです。私たちはそれをサーバー上に実稼働モードで非常に迅速に展開しましたが、驚いたことに機能しました。通知はすべてのドメインに表示されていました。
これは、Rails が取得できない localhost ドメインに関するもので、私は lvh.me を使用していました。

ヒントは、Railscast の (最近の) コメントにありました。

http://railscasts.com/episodes/221-subdomains-in-rails-3?view=comments#comment_146276 localhost のサブドメイン間でセッションを共有したい場合、知っておくべき重要なことが 1 つあります。:domain => ".lvh.me" の使用は常に機能するとは限りません (私の場合は機能しませんでした) 。セッション・トゥ・ザ・レスキュー/

@David Sulc、ユーザーがログインしました。

于 2010-12-15T22:13:21.507 に答える