次のセットアップで実行されている 3 つの Ruby/Rails アプレットがあります。
services.mydomain.com/applet1
services.mydomain.com/applet2
services.mydomain.com/applet3
これらは Phusion Passenger を介して提供され、App1 と App2 は期待どおりに機能します。
問題は、URL に埋め込まれた I18n ロケールを使用する App3 にあります。
services.mydomain.com/applet3/en/
services.mydomain.com/applet3/fr/
services.mydomain.com/applet3/es/
問題は、link_to URL に「applet3」が含まれていないように見えることです。したがって、代わりに:
services.mydomain.com/applet3/en/signin
私は得る:
services.mydomain.com/en/signin
...これはルーティングできません。
私の routes.rb は次のようになります。
Rails.application.routes.draw do
scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
resources :users
resources :sessions, only: [:new, :create, :destroy]
match '/signup', to: 'users#new'
match '/signin', to: 'sessions#new'
match '/signout', to: 'sessions#destroy', via: :delete
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
root to: "static_pages#home"
end # scope locale
end # Rails.application.routes.draw do
...そして app/controllers/application_controller.rb には次のものがあります:
before_filter :set_locale_from_params
def url_options
{ only_path: true, locale: I18n.locale }
end
protected
def set_locale_from_params
if params[:locale]
if I18n.available_locales.include?(params[:locale].to_sym)
I18n.locale = params[:locale]
else
flash.now[:notice] = 'Translation not available'
logger.error flash.now[:notice]
end
end
end
...そしてconfig/environments/production.rbには次のものがあります:
Rails.application.routes.default_url_options[:host] = 'http://services.mydomain.com/applet3/'
EDIT1: link_to ステートメントの例を追加
<%= link_to(t(".#{language}"), root_path(locale: language)) %>
/EDIT1
URL パスに「folder_name」がない、より「通常の」配置に App3 を移動すると、すべて正常に動作します。したがって、スコープまたは URL オプションを設定する方法に欠けているのは簡単なことです。
ヘルプと提案をお寄せいただきありがとうございます。