Установка нескольких общих папок, установка отдельных рельсов - PullRequest
6 голосов
/ 05 января 2011

У меня есть приложение rails, которое я хотел бы использовать для нескольких сайтов, каждый с разным дизайном.

Я хотел бы изменить каталог установки / public rails на что-то другое (динамически в конечном итоге).Однако я столкнулся с проблемой (ошибкой?) Смены каталогов ...

В моем файле application.rb я изменил путь paths.public на что-то отличное от "public" (скажем, "site_one"),Вот код:

puts paths.public.paths
paths.public = "site_one"
puts paths.public.paths

Две команды "put" предназначены для отладки.Теперь запустите "rails s", и вы увидите:

/home/macklin/app/public
/home/macklin/app/site_one

Это подтверждает, что путь изменен правильно.Однако вскоре после этого rails выдает следующую ошибку (дайте мне знать, если вам нужна полная трассировка):

Exiting
/usr/lib/ruby/gems/1.8/gems/railties-3.0.3/lib/rails/paths.rb:16:in `method_missing': undefined method `javascripts' for #<Rails::Paths::Path:0x7f422bd76f58> (NoMethodError) from /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_controller/railtie.rb:47

Я предполагаю, что он не может найти каталог javascripts, даже если он явно находится в "site_one""папка.

Кто-нибудь знает, почему я получаю это?

Ответы [ 2 ]

3 голосов
/ 10 мая 2016

Я знаю, что этот вопрос довольно старый, но я думаю, что нашел ответ на этот вопрос в Rails 4.2.

Вам просто нужно вставить эту строку в ваш config/application.rb:

middleware.use ::ActionDispatch::Static, "#{Rails.root}/another_public_folder_name", index: 'index', headers: config.static_cache_control

Это делает все файлы в /another_public_folder_name обслуживаемыми Rails.

Именно так Rails использует для настройки стандартной папки /public.Я нашел это, проверяя источники:

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/railties/lib/rails/application/default_middleware_stack.rb#L24

2 голосов
/ 05 января 2011

Duh.Просто добавьте еще 2 правила для таблиц стилей и JavaScript (я думаю, они стираются при изменении родительского пути)

paths.public.stylesheets = "site_one/stylesheets"
paths.public.javascripts = "site_one/javascripts"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...