问题 如何将Rails 5 API应用程序转换为可以充当API和应用程序的rails应用程序?


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

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应用程序转换为完整的应用程序?

谢谢!


8153
2018-04-16 21:27


起源

更新并删除了“后退”部分。它最初从来不是常规的应用程序应用程序,它最初是一个api应用程序。 - Michael Durrant


答案:


我遇到了同样的问题,我相信我已经解决了。我希望找到一个简单的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将通过它为新应用程序创建所有文件的常规过程,但这次它几乎会跳过所有文件,因为它们已经存在。它会在每一个存在冲突的地方停止,而这就是你需要逐个分析冲突的地方。

以下是冲突文件对我有用的内容:

  1. 提交 d 在他们每个人身上看到差异。
  2. 如果差异只是添加行,那么允许它 y。这就是我们毕竟这样做的原因。
  3. 如果差异只是删除代码,则拒绝它 n
  4. 如果差异是添加和删除代码,请记下该文件以在此过程之后返回。然后接受它 y

完成此操作后,使用git检查(4)您记下的每个文件的差异。你需要保留rails添加的更改,但是你可能希望复制它删除的所有代码。这可能包括Gemfile。

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

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

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


8
2018-02-01 22:29





从api应用程序之外的目录(例如其父级 - cd ..) 我会做

rails new comparison_real_app

然后比较的内容 comparison_real_app 使用您的应用程序并复制api应用程序中缺少的文件,并根据需要更改任何其他文件。


3
2018-04-16 23:30



注意:你可以使用 meld (或其他GUI工具)获取两个文件夹之间的差异,并根据具体情况合并更改。 - Ivan Kolmychek


因此,我可能需要做更多的事情,但要解决样式表的问题,您需要手动创建 views/layouts/application.html.erb 和 assets/stylesheets/application.css 文件。


1
2018-04-16 23:14