Как преобразовать приложение Rails 5 API в приложение rails, которое может действовать как API и приложение?

Я изначально создал его в рельсах 5 с тегом -api.

От http://edgeguides.rubyonrails.org/api_app.html,

Я удалил config.api_only = true

Я изменил

class ApplicationController < ActionController::API
end

к

class ApplicationController < ActionController::Base
end

Проблема, с которой я столкнулся сейчас, - это когда визуализируется представление, например. welcome/index.html.erb, соответствующий CSS файл assets/stylesheets/welcome.css.scss не является.

Любая идея, как я могу это исправить, или, в общем, конвертировать приложение API в полное приложение?

Спасибо!

Ответ 1

Я столкнулся с этой проблемой и считаю, что решил. Я надеялся найти простой генератор рельсов, чтобы преобразовать его, но, если я не пропустил что-то, это не так просто. Однако рельсы делают это проще, чем делать это полностью вручную.

Ключ в том, что команда rails new может использоваться в существующем приложении. Обратите внимание, что в этом ответе предполагается, что вы знаете, как использовать git и используете его в существующем приложении.

Прежде всего, самое главное, создайте новую ветку. Это выполняет две функции: 1), поэтому вы не должны терять работу, если вы ее испортите (хотя все же может быть подходящее время для ее резервного копирования, например, GitHub) и 2), чтобы вы могли сравнивать файлы, которые конфликты после этого процесса и получить любую работу, которую этот процесс перезаписывает (для меня это было не так много, но это было важно).

В терминале из каталога приложения вы хотите перейти от API только к стандарту. Выполните следующие команды, чтобы перейти в один каталог, а затем рельсы напишите новый проект поверх существующего. Используйте те же параметры для второй команды, которую вы использовали при создании своего приложения. Например, для меня я заменил [options] ниже на -d postgresql --skip-turbolinks --skip-spring -T, потому что это параметры, которые я использовал при создании своего приложения. Я использую флаг --skip-bundle, потому что он может изменить ваш Gemfile больше, чем вы этого захотите, и вы, вероятно, захотите изменить его часть перед связыванием.

$ cd ..
$ rails new your_app_name --skip-bundle [options] 

Теперь rails проведет обычный процесс создания всех файлов для нового приложения, но на этот раз он будет пропускать почти все из них, потому что они уже есть. Он остановится на каждом из них, на котором есть конфликт, и где вам нужно будет анализировать конфликты один за другим.

Вот что сработало для меня в конфликтующих файлах:

  • Отправить d для каждого из них, чтобы увидеть различия.
  • Если разница заключается только в добавлении строк, то разрешите ее с помощью y. Вот почему мы делаем это в конце концов.
  • Если разница заключается только в удалении кода, то отклоните его с помощью n.
  • Если разница заключается в добавлении и удалении кода, запишите этот файл, чтобы вернуться после этого процесса. Затем примите его y.

По завершении этого использования используйте git, чтобы изучить разницу в каждом файле из (4), который вы записали. Вы хотите сохранить изменения, которые добавили рельсы, но тогда вы, скорее всего, захотите скопировать весь код, который он удалил. Вероятно, это будет Gemfile.

Заметным отличием является то, что рельсы изменят контроллер приложения от наследования от ActionController::API до ActionController::Base. Я хочу один контроллер для каждого, поэтому я создал новый файл `app/controllers/api_controller.rb '. Затем я скопировал то, что было в моем исходном приложении ApplicationController, к новому файлу и просто изменил имя класса на ApiController. Затем я изменил все существующие контроллеры API, чтобы наследовать от нового ApiController, а не от ApplicationController.

После этого запустите bundle install, чтобы установить рельсы драгоценных камней, добавленные в приложение.

Это сработало для меня. Я надеюсь, что это помогает. Удачи!

Ответ 2

Из каталога вне приложения api (например, его родителя - cd ..) я бы сделал

rails new comparison_real_app

а затем сравните содержимое comparison_real_app с вашим приложением и скопируйте файлы, отсутствующие в приложении api, и измените любые другие файлы по мере необходимости.

Ответ 3

Итак, возможно, больше вещей, которые нужно будет сделать, как я (вы), но для решения проблемы с таблицами стилей вам необходимо вручную создать файлы views/layouts/application.html.erb и assets/stylesheets/application.css.