web-dev-qa-db-ja.com

モジュールを「ハードリセット」する方法はありますか?

理由はわかりませんが、いくつかのモジュールで極端な問題が発生していますが、最も顕著なのはサインアップモジュールです。私が抱えている問題は突然であり、昨日はそこになかったので、モジュールの設計に問題はないことはわかっています。私はパッチを試しましたが、それらは他の問題を引き起こしました。それからそれは私に起こりました:なぜ私はそのようなことをしなければならないのですか?モジュールを「ハードリセット」する方法はありませんか? (つまり、モジュールとその残りをdrupalデータベースから削除し、最初からモジュールがインストールされたことがないかのように最初から開始してから、再インストールします)アンインストールを試みましたが、モジュールファイルを削除し、再度ダウンロードして有効にしますが、再度有効にすると同じエラーが発生します。どうしても最初からそこにないかのように削除して、白紙の状態から始めることができますか?

3
Ephraim

この回答は、Drupalがどのように機能しているかについての私の理解を反映しています。より多くのまたは異なる理解をお持ちの方は、ぜひ話をしてください。もっと知りたいです。

モジュールをアンインストールしてすべての残骸を削除することは、それ自体をクリーンアップするためにモジュールに含まれるコードと同様に機能します。たとえば、テーブルの追加やデータベースの変更などの変更を行い、テーブルを適切に削除しなかった場合、テーブルはそのまま残ります。モジュールを削除すると、Drupalコアがモジュールがなくなったことを認識し、モジュールが提供するフックを探してハングアップしないことを条件に、潜在的な問題の多くを取り除く必要があります。'update。 php 'in the URL?これにより、Drupalはモジュールへのすべての接続を更新します。モジュールがなくなった場合、応答できないモジュールへの呼び出しは行われません。

本当にリセットする唯一の方法Drupalはバックアップを維持することです。モジュールをインストールする前に、少なくともサイト開発中は毎日などバックアップを取ってください。モジュール バックアップと移行 は、サイトデータベースのバックアップを簡略化する簡単な方法です。また、サイトの開発時にコードを追跡するためにGitを使用することも検討することをお勧めします。Gitは基本的にUNIXツールですが、次のようなWindows UIバージョンがあります。 GitGui コードを追跡し、追跡して作業することは難しくありません。

7
Ashlar

以下のエラーに関するコメントに基づいて、ハードリセットは役に立たないと思います。

PDOException:SQLSTATE [42S02]:ベーステーブルまたはビューが見つかりません:1146テーブル 'masada_drupal.field_data_field_date'は存在しません:SELECT COUNT(*)AS式FROM(SELECT n.nid AS nid、n.title ASタイトル、n。タイプASタイプ、s.status AS signup_status、s.close_signup_limit AS signup_close_signup_limit、1 AS式FROM {node} n INNER JOIN {signup} s ON s.nid = n.nid LEFT OUTER JOIN {signup_log} s_l ON s.nid = s_l.nid LEFT OUTER JOIN {field_data_field_date} d ON d.entity_id = n.nid GROUP BY nid、title、type、signup_status、signup_close_signup_limit)サブクエリ; PagerDefault-> execute()の配列()(/var/www/masadatactical.com/htdocs/includes/pager.incの74行目)

これは signup モジュールのD7ポートの 既知のバグ のようです。最初のコメントに役立つ patch があります。


モジュールを「ハードリセット」する方法に関する質問に答えるには:

完璧な世界では、モジュールを無効にしてから ninstalling (削除ではない)は「ハードリセット」と同じだと思います。

「アンインストール」したら、モジュールを再度有効にすれば完了です。

完全な世界ではないことを考えると、適切に「アンインストール」されなかったテーブルをDBで調べ、手動で削除する必要がある場合があります。

モジュールまたはテーブルの削除を開始する前に、DBバックアップを作成することをお勧めします。

最初に signup モジュールの 既知のアンインストール バグを検索することをお勧めします。

4
Citricguy

最も簡単な方法は、drushコマンドを使用し、Develコマンドを使用してモジュールを再インストールすることです。

drush -y dre foo

または標準的な方法を使用して:

drush -y dis foo && drush -y pm-uninstall foo && drush -y en foo

ファイルを削除する必要はありません。

1
kenorb

他のモジュールでも同様の問題がありました。モジュール自体のデータベーステーブルの1つに格納されているデータの一部に問題がありました。

モジュールのハードリセットは、通常、テーブルにデフォルトデータを使用してモジュールを新しくインストールすることを意味します。 Drupal-7では、多くのモジュールがデータベーステーブルを削除してモジュールを完全にアンインストールする方法を提供します。これは、admin/modules/uninstallにアクセスして行うことができます。ここからアンインストールした後、それを再インストールすると、すべて新しいものになります。

ただし、ほとんどのモジュールはこの機能を提供しません。その場合、データベースから適切なテーブルを削除することにより、わずかなリスクを負う必要があります。殺害に行く前に、バックアップを取ってください。多くの場合、テーブルの削除は私にとってはうまくいきました。ただし、もう一度警告します。危険です。削除した後、どこかに壊れていないかサイトを徹底的にチェックしてください。

手動で削除する方がよいのは、モジュールのコードを調べて、作成されたテーブルを確認することです。次に、対応するテーブルを削除します。

0
shivams

実際にモジュールをアンインストールしましたか、それとも単に無効にしましたか?

「モジュール」ページには「アンインストール」というタブがあります。モジュールを無効にした後、このタブにアクセスして、モジュールの実際のアンインストールスクリプトを実行する必要があります。モジュールが正しくビルドされている場合、このアンインストールスクリプトはデータベースからモジュールのトレースをすべて削除します。

0
sheena_d