我想添加此功能,但对实现它的方法有点不确定。基本上希望我能够做的是:
在 /admin 访问我网站的管理区域 单击链接以编辑主页内容 在文本区域中显示 /app/views/pages/_home.md 的内容 对其进行更改并将其保存回来
基本上,只是不确定这是否可行,如果可以,这将如何适合我的 Github 存储库?
亲切的问候,尼尔
我想添加此功能,但对实现它的方法有点不确定。基本上希望我能够做的是:
在 /admin 访问我网站的管理区域 单击链接以编辑主页内容 在文本区域中显示 /app/views/pages/_home.md 的内容 对其进行更改并将其保存回来
基本上,只是不确定这是否可行,如果可以,这将如何适合我的 Github 存储库?
亲切的问候,尼尔
您会遇到几个问题。
第一个是您的应用程序服务器不会接收这些更改,因为它们都是在应用程序服务器启动时加载和缓存的。如果您使用像 unicorn 这样的应用服务器,那么您需要向它发送一个重启信号,这将需要几秒钟的时间让新的主进程启动并且您的更改生效。
您已经指出的另一个问题是,如果您使用 capistrano 进行自动部署,那么您的更改将在下一次部署时恢复,除非您随后以正常方式手动提交相同的更改,这会违背目的。
通常,处理此问题的方法是将模板移动到数据库表中,这可以解决这两个问题,但意味着您唯一的编辑方式是通过 UI。
如果您仍然打算完成这项工作,那么第一个问题很容易开始工作。只需外壳并执行适当的命令即可重新启动应用程序服务器。在我的部署中,我在脚本/独角兽中有一个独角兽控制脚本,它将被触发system('script/unicorn restart')
. 第二个问题更加棘手,因为您需要为服务器运行的用户提供 ssh 密钥,并且能够以该用户的身份推送到您的存储库。一旦你有了它,你就可以进行更改,git add,git commit,最后推送。这将变得有点肮脏的地方是必须处理一个在部署之前的分支,并且必须在能够推送之前拉/合并。一个可能的解决方案是在 github 上有一个特定的分支(即生产分支),它始终与部署的内容同步。在推送和部署的人与在 UI 上进行编辑的人之间仍然会有一个小窗口,推送会失败。如果当前部署的 HEAD 与 github 生产分支不匹配,也可以通过锁定 UI 编辑器来缓解这种情况,当部署同步它们时解锁它。