0

本番環境では、Rails 3.1.4 アプリが suburi server_ip/by にデプロイされています。suburi /by への展開では、link_to を呼び出すときに、カスタム メソッド 'view_handler' (閲覧履歴を記録するため) の前に /by を追加する必要があります。Rails プロダクションでの例を次に示します。

<%= link_to 'Projects', "/by/view_handler?index=1&url=#{projects_path}" %>

ただし、開発環境またはテスト環境では、「/by」は必要なく (エラーが発生します)、link_to は次のようになります。

<%= link_to 'Projects', "/view_handler?index=1&url=#{projects_path}" %>

routes.rb には、次のものがあります。

  match '/view_handler', :to => 'application#view_handler'

Rails環境またはroutes.rbのみでセットアップし、suburi展開のためにrailsコード自体を変更しない方法はありますか? または、link_to だけにレール プロダクションで suburi を追加するにはどうすればよいでしょうか?

4

3 に答える 3

3

試す:

  scope(Rails.env=='production' ? '/by' : '') do
    resources :foos
    ....
  end
于 2012-05-07T17:35:33.310 に答える
1

これを正しく理解しているかどうかはわかりませんが、次の2つのことを試すことができます。

1)routes.rbの開発ルートの前に本番ルートを配置します。Railsは最初にそれを一致させようとし、dev / testにいる場合は失敗し、次にdev/testルートを一致させて成功します。あなたが本番環境にいる場合、それはもちろんその最初のルートと一致します。

Rails.env.production?2)環境に基づいて描画するルートを決定するために使用して、両方のルートを条件ステートメントでラップします。

if Rails.env.production?
  match #production route
else
  match #dev/test route
于 2012-05-07T17:09:19.197 に答える
0

これが、壊れたルートの問題に使用することにしたものです。初期化子では、 my_constant.rb は次のように作成されます:

if Rails.env.production?
  SUBURI = "/by"
else
  SUBURI = ''
end

すべての /view_handler の前に、SUBURI を追加します。例えば、

<%= link_to 'Projects', "/view_handler?index=1&url=#{projects_path}" %>

になります:

<%= link_to 'Projects', SUBURI + "/view_handler?index=1&url=#{projects_path}" %>

SUBURI は、変数を渡すすべての URL に追加する必要があります。ソリューションはこれまでのところ機能しています。

于 2012-05-07T20:46:08.850 に答える