次の問題があります。Rails が実行されているポートを明示的に伝えたいので、_url ヘルパーは自動検出されたポートの代わりにそのポートを使用します。
根本的な問題は、レールアプリをシンサービスし、静的コンテンツをサービスするApacheがあることです。これは、Web サイトがポート 80 (Apache) でアクセスされている限り正常に機能しますが、thin が実行されているポートでアクセスされた場合には機能しません。(これは、自動検出されるポートです。)
次の問題があります。Rails が実行されているポートを明示的に伝えたいので、_url ヘルパーは自動検出されたポートの代わりにそのポートを使用します。
根本的な問題は、レールアプリをシンサービスし、静的コンテンツをサービスするApacheがあることです。これは、Web サイトがポート 80 (Apache) でアクセスされている限り正常に機能しますが、thin が実行されているポートでアクセスされた場合には機能しません。(これは、自動検出されるポートです。)
Railsは、完全修飾ドメイン名を含まない相対リンクを作成することになっています。ここの例を参照してください。引用します。
link_to "Profile", profile_path(@profile)
# => <a href="/profiles/1">Profile</a>;
一方、* _ urlショートカットはフルパスを使用しています。これは、リバースプロキシの背後にいる場合は不適切です(この場合はApacheです)。
リンクに*_path、リダイレクトに* _urlのみを使用してみましたか?リダイレクトの場合、apacheはそのポートに一致するようにURLを書き換える必要があります(ApacheレベルでProxyPassおよびProxyPassReverseディレクティブを使用していると仮定します)。
url_forを使用する場合は、:only_pathをtrueに設定することで、強制的に相対にすることができます。
apacheの構成がProxyPassに基づいていない場合は、この回答を修正できるように、興味深い部分をコピーして貼り付けてください。
前もって感謝します。
Ruby on Rails は独自のサーバーを使用するため、Web サイト (およびその後の Ruby on Rails アプリケーション) にアクセスするユーザーは、適切なポートにリダイレクトする必要があります。
Ruby on Rails サーバーのポートを変更するには、サーバーを -p オプションで起動する必要があります。
ruby s -p <port-number>