gpt4 book ai didi

ruby-on-rails - 如何将 Rails 5 API 应用程序转换为既可以充当 API 又可以充当应用程序的 Rails 应用程序?

转载 作者:行者123 更新时间:2023-12-03 13:28:18 26 4
gpt4 key购买 nike

我最初在 rails 5 中使用 --api 标签创建了它。

来自 http://edgeguides.rubyonrails.org/api_app.html ,

我删除了 config.api_only = true
我变了

class ApplicationController < ActionController::API
end


class ApplicationController < ActionController::Base
end

我现在遇到的问题是 View 何时呈现,例如。 welcome/index.html.erb ,对应的CSS文件 assets/stylesheets/welcome.css.scss不是。

知道如何解决这个问题,或者更一般地将 API 应用程序转换为完整的应用程序吗?

谢谢!

最佳答案

我遇到了同样的问题,我相信我已经解决了。我希望找到一个简单的 rails 生成器来转换它,但除非我错过了一些东西,否则这并不容易。然而,rails 确实比完全手动操作更容易。

关键是rails new命令可用于现有应用程序。请注意,此答案假定您知道如何使用 git 并在现有应用程序上使用它。

首先也是最重要的是,创建一个新分支。这有两个功能,1)所以如果你搞砸了你不应该丢失你的工作(尽管它仍然可能是备份它的好时机,比如到 GitHub),和 2)所以你可以比较有在此过程之后发生冲突并检索此过程覆盖的任何工作(这对我来说并不多,但很重要)。

在终端中,从您要从仅 API 更改为标准的应用程序目录中。运行以下命令进入一个目录,然后让 rails 在现有项目上编写一个新项目。在最初创建应用程序时使用的第二个命令上使用相同的选项。例如,对我来说,我替换了 [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) 中每个文件的差异。您可能希望保留 rails 添加的更改,但随后您可能希望将其删除的所有代码复制回来。这可能包括 Gemfile。

    一个显着的区别是 rails 改变了应用程序 Controller ,而不是从 ActionController::API 继承。至 ActionController::Base .我想要一个 Controller ,所以我创建了一个新文件“app/controllers/api_controller.rb”。然后我将原始 ApplicationController 中的内容复制到新文件中,并将类名更改为 ApiController。然后我将所有现有的 API Controller 更改为从新的 ApiController 继承而不是从 ApplicationController 继承。

    完成后,然后运行 ​​ bundle install安装添加到应用程序中的 gems rails。

    那对我有用。我希望它有帮助。祝你好运!

    关于ruby-on-rails - 如何将 Rails 5 API 应用程序转换为既可以充当 API 又可以充当应用程序的 Rails 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36669981/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com