Директория ресурсов Rails 3 доступна одновременно из корневого каталога CNAME и подкаталога приложения? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть приложение rails 3.0.10, которое у меня есть в каталоге приложений, например:

https://apps.example.com/myRails3App 

Сервер RHEL 5, использующий пассажир.Из коробки приложение прекрасно работает, и мне не нужно было оборачивать свои маршруты в область видимости.

Затем я установил псевдоним CNAME из нового домена, чтобы он указывал на приложение, например:

http://great.vanityurl.com

Теперь, после повторного развертывания приложения и перезапуска сервера, когда я посещаюПриложение из apps.example.com/myRails3App все мои активы, вызываемые из "stylesheet_link_tag" (или "javascript_include_tag"), ищут ресурсы в "apps.example.com/stylesheets" вместо правильных "apps.example.com/myRails3App / stylesheets "(хотя стандартные теги ссылок работают правильно).

Между тем, приложение vanityurl выглядит великолепно, поскольку ссылка на great.vanityurl.com/stylesheets разрешается правильно.

Может показаться, что я должен использовать что-то вроде Rails ''lative_url_root', ноэто, конечно, недоступно в rails 3.0.10 (насколько я понимаю).

Что мне нужно сделать, чтобы убедиться, что приложение выглядит и функционирует одинаково, независимо от того, посещается ли оно через исходное местоположение(apps.example.com/myRails3App) или адрес тщеславия (great.vanityurl.com)?

Ответы [ 2 ]

2 голосов
/ 14 марта 2012

Вы можете решить вашу непосредственную проблему, используя комбинацию:

config.action_controller.asset_host = 'apps.example.com'
config.assets.prefix = "/myRails3App"

Для прямого управления URL-адресами, сгенерированными из помощников ресурсов Rails, о которых вы упоминаете.

0 голосов
/ 16 марта 2012

Ответ Winfield будет работать для Rails 3.1, но 3.0 не нравится 'config.assets.prefix ='.

К счастью, хотя это и не было окончательным решением, он указал мне правильное направление с помощью 'config.action_controller.asset_host = ". После проверки API Rails 3.0 для asset_host =, я обнаружил asset_path =.

Я закончил тем, что поместил это в свое приложение. Rb:

config.action_controller.asset_path = proc { |asset_path|
      if (Rails.env != "development_local") and (!asset_path.starts_with?("/myRails3App"))
        "/myRails3App#{asset_path}"
      else
        asset_path
      end
    }

И во время развертывания мой скрипт capistrano генерирует символическую ссылку из {app_root} / public на {app_root} / public / myRails3App, позволяя, например, всем вызовам ресурсов myRails3App / stylesheets работать независимо от того, посещает ли пользователь или нет с URL-адреса, по которому требуется каталог приложения.

Это решение кажется грязным, но оно работает.

Спасибо, Уинфилд, за помощь в обеспечении работоспособности моего приложения.

...