web-dev-qa-db-ja.com

データベースの更新があるバージョンをインストールした後、モジュールを安全にダウングレードする方法はありますか?

Drupal 7.多くのモジュールを実行しているサイトがあります。モジュールの更新をインストールし、update.phpを実行してから、いくつかのテストを実行しました。モジュールの更新の1つが私のサイトの重要な機能を壊しました。

さらにテストを行った結果、どのモジュールの更新が機能を損なったかを発見しました(rc1からrc2への更新)。このモジュールを以前のバージョン(rc1)に戻すと、サイトの機能が復元されます。ただし、rc2をインストールすると、update.phpを実行したときに実行されたそのモジュールのデータベースの更新がありました。

このモジュールのrc3/a 1.0リリースが再び更新されるのを待ちます。ただし、単に古いrc1バージョンをrc2に再インストールしても安全ですか?または、これは将来的に重大な問題を引き起こす可能性があり、代わりにバックアップから戻る必要がありますか?

モジュールを「ダウングレード」するための一般的なベストプラクティス(ある場合)について知りたいので、特定のモジュール名は付けません。

6
Patrick Kenny

答えは「場合によります」だと思います。

hook_update_N インデックスを追加しただけなので、安全です。列を追加または変更した場合、インスタンスをモジュールの特定の部分で機能させることができますが、その他は失敗します(たとえば、データベースに保存する部分)。または、さらに悪いことに、カスタムテーブルのデータベースで一貫性のないデータを取得し始める可能性があります。また、ステータスレポートにデータベースに関するエラーが表示されます。

問題のモジュールを見て、hook_update_N定義と変更点を確認してください。変更ログに記載されている場合がありますが、すべてがログに記録されたとは限りません。次に、何をすべきかについて判断を下します。

6
mpdonadio

Backup and Migrateというモジュールを毎日バックアップするように設定して使用しているため、モジュールの更新を行う前にバックアップを忘れたときにバックアップを取得できます。

バックアップを作成すれば答えはイエスだと思います。更新されたデータベースでコードを使用することはできますが、それが機能するかどうかは更新に依存します。しかし、ほとんどのデータベースの更新ではフィールドが追加されたり、フィールドが大きくなったりするため、問題にはなりません。また、変更はモジュールの更新に含まれているため、更新の内容を簡単に確認できます。また、手探りでやりたい場合は、手動で更新を元に戻します。

実際のリスクは、フィールドまたはテーブルが削除または名前変更された場合に発生します。

私はこれを研究していません。これは、モジュールのインストール、および独自のモジュールの更新/インストールファイルの作成に関する私の経験です。

バックアップと移行 がインストールされていない間、すべてを通常の状態に戻すのに半日かかりました(これがdrupalまたはこのモジュールがまだ見つかりません)

5
FLY

この投稿は古いですが、まだアクティブですが、Drupal 7.41 => 7.43から更新するときに一連のモジュールを更新したときにロールバックする方法を探す必要がありました。phpを受け取りました。エラー:Fatal error: Class 'EntityCacheUserController' not found in /var/www/html//includes/common.inc on line 7999

また、ファイルとDBをバックアップしましたが、時間をあまりかけずに解決する方法を探していました。

Drushコマンドrebuild-registryを実行しました(標準オプションではありません)。コマンドを実行してからdrush cc allを実行すると、サイトがオンラインに戻ります。

これがお役に立てば幸いです。

/ r

0
r2coder