この機能を追加したいのですが、実装方法が少しわかりません。基本的に私がしたいのは次のとおりです。
/adminにある私のサイトの管理エリアにアクセスします。リンクをクリックしてホームページのコンテンツを編集します。テキストエリアに/app/views/pages/_home.mdのコンテンツを表示します。変更を加えて保存し直します。
基本的に、これが可能かどうかはわかりません。可能であれば、これは私のGithubリポジトリにどのように適合しますか?
よろしく、ニール
この機能を追加したいのですが、実装方法が少しわかりません。基本的に私がしたいのは次のとおりです。
/adminにある私のサイトの管理エリアにアクセスします。リンクをクリックしてホームページのコンテンツを編集します。テキストエリアに/app/views/pages/_home.mdのコンテンツを表示します。変更を加えて保存し直します。
基本的に、これが可能かどうかはわかりません。可能であれば、これは私のGithubリポジトリにどのように適合しますか?
よろしく、ニール
いくつかの問題が発生します。
1 つ目は、アプリケーション サーバーの起動時にすべての変更が読み込まれてキャッシュされるため、アプリケーション サーバーが変更を取得しないことです。Unicorn のようなアプリ サーバーを使用している場合は、再起動信号を送信する必要があります。これは、新しいマスター プロセスが起動して変更が有効になるまでに数秒かかります。
すでに指摘したもう 1 つの問題は、capistrano を使用して自動展開を行う場合、通常の方法で同じ変更を手動でコミットしない限り、次の展開で変更が元に戻されることです。これは目的を無効にします。
通常、これを処理する方法は、テンプレートをデータベース テーブルに移動することです。これにより、両方の問題が解決されますが、編集する唯一の手段は UI を使用することになります。
あなたがまだこれを機能させようとしているなら、最初の問題はかなり簡単に機能します。アプリケーションサーバーを再起動するには、適切なコマンドをシェルアウトして実行するだけです。私の展開では、スクリプト/ユニコーンにユニコーン制御スクリプトがあり、次のコマンドでトリガーされますsystem('script/unicorn restart')
. サーバーが実行されているユーザーのsshキーが必要になり、そのユーザーとしてリポジトリにプッシュできるため、2番目の問題はより困難です。それができたら、変更、git add、git commit、そして最後に push を行うことができます。これが少し汚くなるのは、展開されているものよりも先にあるブランチに対処しなければならず、プッシュできるようになる前にプル/マージする必要がある場合です。これに対する可能な解決策は、デプロイされているものと常に同期される特定のブランチ (つまり、運用ブランチ) を github に置くことです。誰かがプッシュしてデプロイしてから、誰かが UI を編集してプッシュが失敗するまでの間に、まだ小さなウィンドウがあります。これは、現在デプロイされている HEAD が github プロダクション ブランチと一致しない場合に UI エディターをロックアウトし、デプロイがそれらを同期するときにロックを解除することによっても軽減できます。