Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2011-01-06 02:19:33

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

ご指導よろしくお願い致します。

最近まで「Ver.3.3」にて運営しておりました。
この度、重い腰を上げて最新バージョンにしようと思い、アップグレードではなく、
新規にインストールしようとしたのですが、うまくいきませんでした。

ファイルのアップ後、「/install/index.php」にアクセス、必要事項を記入して、「インストールを実行する」を押したら、次のようなエラー画面になってしまいます。(白紙の画面に一行のみ)

Fatal error: Call to undefined function mysql_set_charset() in /home/hoge/public/www/nuc/install/index.php on line 603

色々検索して自分なりに試行錯誤して、何度かチャレンジしたのですが、解決に至りませんでした。

環境は、

    ハッスルサーバー
    PHP: 5.2.9
    MySQL: 5.0.88

このハッスルサーバーは、PHP、MySQLともに前バージョンも使えるので、運営中のサイトはとりあえず現状のまま、
新規に「PHP: 5.2.9、MySQL: 5.0.88」にて、Ver.3.51を試そうとしたのですが...???
ハッスルサーバーの前バージョンの時は、問題なくインストールできました。
やはり、「MySQL: 5.0.88 」が問題なのでしょうか?

尚、ローカルの環境では、「Nucleus 3.51」を正常に新規インストールできました。

環境は、XAMPP 1.7.3

    PHP: 5.3.1
    MySQL: 5.1.41

この状況では、ハッスルサーバーにインストールするのは、難しいのでしょうか?
解決策がございましたら、ご指導お願いできないでしょうか。
何卒よろしくお願い致します。

オフライン

#2 2011-01-06 03:03:20

yama
Administrator
登録日: 2005-07-07
投稿: 1,269
ウェブサイト

Re: ver.3.51のインストールができません!

/install/index.phpの602行目の

if ($mySqlVer >= '5.0.7' && phpversion() >= '5.2.3') {

if ($mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) {

に変更すれば、確実に次のelseifに処理が渡ると思うので、ここはこうすべきな気がしますが、
そのelseif部分が set namesなのってどうなのかな?

sql_query("SET CHARACTER SET " . $charset);

のほうがよいのではという気がします。

さらにその次の

$collation = ($charset == 'utf8') ? 'utf8_unicode_ci' : 'ujis_japanese_ci';

も、

$collation = ($charset == 'utf8') ? 'utf8_general_ci' : 'ujis_japanese_ci';

のほうが(ほんのわずかだけ)パフォーマンスがよさそう。

私より詳しい人がいると思うので、焦らずしばらくお待ちくださいです。

オフライン

#3 2011-01-06 04:14:00

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

yama.kymsさん、お世話様になります。

ご指導いただいたとおりに、「/install/index.php」を書き換えて、チャレンジしたのですが、
別のエラーが出てしまいました。

mySQL error with query CREATE DATABASE hoge DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci: Can't create database 'hoge'; database exists

Nucleusのロゴを挟んで

エラー!

エラーメッセージは次の通りです: "データベースを作成できませんでした。作成の権限があるかどうか確認してください。SQL エラーの内容:: Can't create database 'hoge'; database exists";

戻る

この後、3箇所の変更を一つずつ試したり、組み合わせを変えたりしてみたのですがだめでした。


ちなみに、インストール画面には、

[size=117:24c5fk5u]PHP と MySQL のバージョン

以下はあなたのウェブホストにおけるPHPとMySQLサーバーのバージョンです。Nucleusのサポートフォーラムに問題を報告する時は、この情報を書き添えてください。

    * PHP: 5.2.9
    * MySQL: mySQL error with query SELECT VERSION() AS version:

      mySQL error with query SHOW VARIABLES LIKE 'version':

      判別不能 注意: Nucleusの動作には少なくともバージョン 3.23 が必要です

と、出ているのが気になります。
インストーラーが、MySQL バージョンを把握していないということなんでしょうか?

久々にハマってしまいました。(とほほ... roll

オフライン

#4 2011-01-06 10:32:01

yama
Administrator
登録日: 2005-07-07
投稿: 1,269
ウェブサイト

Re: ver.3.51のインストールができません!

set namesのあたりはあまり自信はないですが、他の2つは問題ないと思います。というか、そのへんはあまり関係なくて、PHP5.2.9なのにmysql_set_charset関数が使えないとか、今回はデータベース作成の処理が走ったりしてますが、つかみどころがないトラブルのように思えます。念のため、ファイル一式をアップロードし直していただけますか。ファイルの破損が原因で起きるトラブルとも思えませんが・・

インストーラがMySQLのバージョンを認識できないのは、それで合ってます。今のところ、インストーラ側の問題と思っていただければと。今回はたまたまインストールに失敗しているので気になっているのだと思いますが、環境に関係なく、この画面ではMySQLのバージョンを認識することはできないと思います。

オフライン

#5 2011-01-06 11:52:27

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: ver.3.51のインストールができません!

「PHP と MySQL のバージョン」のエラー文字列は、ここですでに報告があるものです。
http://japan.nucleuscms.org/bb/viewtopic.php?t=4500

データベースとの接続が確立していないのに、データベースのバージョンを出力するためのクエリをサーバに要求しているために発生しているバグです。インストールスクリプトを刷新して、インストールのプロセスを変更しないと解決できないバグなので、3.51はそのままリリースしました。

mySQL error with query CREATE DATABASE hoge DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci: Can't create database 'hoge'; database exists

とのエラー出力なので、現状は以下と思われます。

1. インストールスクリプトで、「データベースの作成」を指定している。
2. データベース自体はMySQLサーバにすでにあるため、「database exists」のエラーが発生する。

そのため、インストールスクリプトでデータベースの名前だけ指定し、作成のオプションは指定しないで試してみると、幸せになれるかもしれません。

関数「mysql_set_charset」に関しては、マニュアルによると、PHPのバージョン5.2.3以降、MySQL 5.0.7以降で使えるはずなのですが(http://php.net/manual/ja/function.mysql-set-charset.php)、どうもその通りではないようですね。サーバ環境のPHPディレクティブに依存するわけでもないし、かと言ってMySQLとの接続が確立してないよ的エラーではなく単に関数がありませんだから、ハテ・・・。

オフライン

#6 2011-01-06 17:35:56

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

yama.kymsさん、Mocchiさん、お世話になります。

yama.kymsさんにご指導いただいた記述をして、Mocchiさんのご指摘どおりオプションのチェックを外して、インストールを試みてみました。
その結果、エラーは出ませんでしたが、まったくの白紙のページになってしまいました。
MySQLには、20個のテーブルが作成されていました。(確かもっと多いですよね?)

もう一度やり直そうと思い、テーブル削除、Nucleusファイルの再アップロードをして、インストールチャレンジしたのですが、
結果は変わりませんでした。

一部のテーブルはできているので、インストールできそうなんですが...???
う~んっ、手強いです。 roll

オフライン

#7 2011-01-06 18:24:13

yama
Administrator
登録日: 2005-07-07
投稿: 1,269
ウェブサイト

Re: ver.3.51のインストールができません!

ハッスルサーバーをお試し契約して試してみたところ、全く同じ状態になりました。これから検証してみます。

オフライン

#8 2011-01-06 18:42:14

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

yama.kymsさん、お手数をおかけいたします。

ご多忙とは存じますが、よろしくお願い致します。

オフライン

#9 2011-01-06 19:59:42

yama
Administrator
登録日: 2005-07-07
投稿: 1,269
ウェブサイト

Re: ver.3.51のインストールができません!

お待たせです。修正済みのテストパッケージを添付しますので、これにまるごと差し替えて試してください。長くNucleusとお付き合いしてらっしゃるのでご存じとは思いますが、インストールされたtableは先に削除しちゃってください。

インストーラ側に施した「mysql_set_charsetがない場合の対策」を、本体側にも同じように施しました。Nucleusのインストーラは、インストール処理を実行する時に本体側のファイルを読み込みます。関連して読み込まれるlibs/sql/mysql.php内でmysql_set_charset由来のエラーが発生してました。

PHP5.2.9を採用しているハッスルサーバでなぜmysql_set_charset関数が使えないのかは謎です・・

http://nuc.hustle.ne.jp/351_r1.zip
フォーラムにファイルを添付できなくなっちゃってるので上記URLに上げときます

オフライン

#10 2011-01-07 02:39:37

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

yama.kymsさん、大変お手数をお掛けいたしました。
お陰さまで無事にインストールすることができました。
本当にありがとうございました。

今回アップグレードせずに、新規インストールでのデータ移行を行なったのですが、手順としては以下でよろしいでしょうか?(Nucleusの復元は使いませんでした。)

※ハッスルサーバーの前に、ローカルPCにて3.51をインストールした際、テーブル「nucleus_member」に「mautosave」フィールドを追加で、3.3のデータの移行ができていました。

    新規インストール完了
    作成されたテーブルを全て削除
    ローカルの3.51のSQLデータををエクスポート(hoge.sql.bz2)
    ハッスルサーバーに「hoge.sql.bz2」をインポート
    該当プラグインをアップロード

Ver.3.51の環境とデータの移行を完了。 :oops:

Mocchiさん、yama.kymsさん、この度は敏速なご対応、ご教授、本当にありがとうございました。

オフライン

#11 2011-01-07 02:53:40

yama
Administrator
登録日: 2005-07-07
投稿: 1,269
ウェブサイト

Re: ver.3.51のインストールができません!

バージョンが違ってると4番目の「ハッスルサーバーにhoge.sql.bz2をインポート」が不安な気がしますが、バージョンが合っているのでこの手順ならクリーンに移行できてよさそうですね。一年近くNucleusから距離を置いてるので自信がないですが、自分がやるとしたら同じ手順をとったと思います。

今回はエンコードまわりの改修を加えて、少なくともハッスルサーバでは問題ないことは確認できましたが、正式版(次の3.61)への取り込みは様々なレンタルサーバに対する汎用性を考えるとさらに検討が必要かもです。よい検討材料になるかもと思います。3.61もあまり間を置かずにリリースされる可能性が出てきましたので、もしよければ協力をお願いします。

オフライン

#12 2011-01-07 11:57:02

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: ver.3.51のインストールができません!

ええと、手順としては間違えていると言えます。autosaveカラム以外にも変更点があるからです。

Nucleus CMSはバージョンアップ毎にちょこちょこ、テーブルの構造を変更しています。autosaveカラムなどがそうです。そしてこのテーブル構造変更を行うために、アップグレード版パッケージでupgradesスクリプトを提供しています。

neohiroさまはテーブルを自力で変更するだけの技量がおありですので、ぜひNucleus CMS 3.51のアップグレード版パッケージを入手していただき、/upgrades/upgrade3.4.phpと/upgrades/upgrade3.5.phpを参照してみて下さい。どうすればいいかわかると思います。

推奨のアップグレード手順は以下となります。3.4系から3.5系へのアップグレードでも、3.3系から3.5系へのアップグレードでも、まったく同じ操作で済むように作ってあります。
1. アップグレード版パッケージの入手
2. パッケージ内のドキュメントに従い、upgradesスクリプトでテーブル構造を変更
3. パッケージ内のドキュメントに従い、コアライブラリをコピー

オフライン

#13 2011-01-07 20:19:23

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

yama.kymsさん、お世話になります。

yama.kyms さんの発言:

3.61もあまり間を置かずにリリースされる可能性が出てきましたので、もしよければ協力をお願いします。

スキルがないのでご協力とまではいかないと思いますが、ハッスルサーバーへの新バージョンインストールの検証なら...っといいますか、新バージョンがでれば直ちにインストールすると思いますので今回のようなインストール課程(検証?)のご報告程度でよろしければご協力させて頂きます。(あまりお役に立ちませんが... :oops: )


Mocchiさん、お世話になります。


Mocchi さんの発言:

ええと、手順としては間違えていると言えます。autosaveカラム以外にも変更点があるからです。

やはりそうでしたか。
ご指摘どおり、/upgrades/upgrade3.4.phpと/upgrades/upgrade3.5.phpを参照して、データベースの構造を変更いたしました。ただ、以下の2箇所がどうも理解できませんでした。 :oops:

upgrade3.4.PHPの

// create DebugVars setting
    if (!upgrade_checkIfCVExists('DebugVars')) {
        $query = 'INSERT INTO '.sql_table('config')." VALUES ('DebugVars',0)";
        upgrade_query('Creating DebugVars config value',$query);   
    }
   
    // create DefaultListSize setting
    if (!upgrade_checkIfCVExists('DefaultListSize')) {
        $query = 'INSERT INTO '.sql_table('config')." VALUES ('DefaultListSize',10)";
        upgrade_query('Creating DefaultListSize config value',$query); 
    }

'INSERT INTO '.ですから、データを入れるということですよね?「DefaultListSize」というのも見当たらないですし、
といいますか根本的に考え方が違うのでしょうか?今一度ご教授お願いできないでしょうか?

尚改めてローカルPCに3.51を新規にインストールして、SQLのテーブル構造を比較してみました。
テーブル: nucleus_blog に 「bfuturepost」というフィールドが、追加されていたので、同じく追加しました。(「/upgrades/upgrade3.4.および3.5」には、なかったのですが...?)

また、ハッスルサーバー側との構造を比較していたら、「インデックスサイズ」というのにローカル側と違いがありました。

●ハッスルサーバー側

PRIMARY    
bnumber
bshortname

以下のインデックスは同じもののように思われます。いずれかを削除してください

●ローカル側

PRIMARY    
bshortname


ハッスルサーバー側の「bnumber」は、削除してもよろしいのでしょうか?

オフライン

#14 2011-01-07 22:16:22

きゃしゃ
メンバー
From: 北河内
登録日: 2007-12-15
投稿: 351

Re: ver.3.51のインストールができません!

・mysql_set_charsetの件
環境別条件分岐(PHPとMySQLのバージョン)で文字コード対応の処理を分けてるんですが、
PHP5.2.3以降でmysql_set_charsetが使えない環境が実在するようなので、

yama.kyms さんの発言:

if ($mySqlVer >= '5.0.7' && function_exists('mysql_set_charset')) {

が確実でよろしいと思うです。

・SET NAMESの件

sql_query("SET CHARACTER SET " . $charset);

が使えない環境があってSET NAMESにしたとかだったように思いますが、
/sql/mysql.phpではSET CHARACTER SETでやっちゃってますね。
問題が出ないようならその方がよいかと。

・MySQLのバージョン認識の件
やはりまだ誤解があるようですが、ここは環境依存です。それを前提に3パターンのバージョン取得を試みます。
あえていうならば、1stステップ、2ndステップを失敗する環境においてエラーメッセージを非表示にできていないことが不具合と言えます。
3.3xあたりまでは絶対にバージョン取得できないコードだったので、進化してはいるのですが。
3.4xではPDOラッパー介していないので問題ありませんでしたし。

//3.61JPに向けて改めてMLに投げます。

オフライン

#15 2011-01-07 23:52:25

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: ver.3.51のインストールができません!

neohiro さんの発言:

スキルがないのでご協力とまではいかないと思いますが、ハッスルサーバーへの新バージョンインストールの検証なら...っといいますか、新バージョンがでれば直ちにインストールすると思いますので今回のようなインストール課程(検証?)のご報告程度でよろしければご協力させて頂きます。

どうもありがとうございます、大歓迎です。一般ユーザが利用することのできるサーバのうち、少なくともハッスルサーバでは動作する実績を作れるわけですので。

私の場合、開発とデバッグは自宅内サーバで、テストはホスティングしているロリポップで行なっています。注意は払っているのですが、それでも、うちの環境だけでしか動いてないという疑念を払拭することはできません。チームのコアメンバーも同様で、多くて2つくらいのサーバでのテストが限界です。

近々リリースするベータ版を、ユーザの皆様に様々なサーバでテストしてその結果を報告していただけると、プロジェクト全体をよりよくすることができるため、ユーザを含めた関係者みんなの負担が減ってよいなぁと思います。

neohiro さんの発言:

'INSERT INTO '.ですから、データを入れるということですよね?「DefaultListSize」というのも見当たらないですし、といいますか根本的に考え方が違うのでしょうか?今一度ご教授お願いできないでしょうか?

DebugVarsとDefaultListSizeは、3.40でテーブル追加されたカラムです。/upgrades/upgrade3.4.phpを参照して下さい。

neohiro さんの発言:

テーブル: nucleus_blog に 「bfuturepost」というフィールドが、追加されていたので、同じく追加しました。(「/upgrades/upgrade3.4.および3.5」には、なかったのですが...?)

3.31で追加されたカラムです。/upgrades/upgrades3.3.phpを参照して下さい。

neohiro さんの発言:

ハッスルサーバー側の「bnumber」は、削除してもよろしいのでしょうか?

構いません。うちの3.41環境にもこれにキーが設定されていますが3.51には設定されないので、おそらくupgradesスクリプトにも反映されてないバグと思われます。実用上の問題はほとんどありません。多少テーブル処理の速度が落ちる程度です。

これまでで現在のテーブル構造に心配が出てきたのであれば、3.51新規インストール用パッケージの/install/install.sqlを参照して、テーブル構造を見比べてみてください。ちょっと時間がかかりますが、より安心して使えると思います。

もちろん、普通にアップグレードしていてくだされば、このような操作は不要となります。今回は特別です wink

きゃしゃ さんの発言:

//3.61JPに向けて改めてMLに投げます。

きゃしゃさん待ってます〜。

オフライン

#16 2011-01-09 02:05:29

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

Mocchiさん、ご報告が遅れてすいません。

Mocchi さんの発言:

これまでで現在のテーブル構造に心配が出てきたのであれば、3.51新規インストール用パッケージの/install/install.sqlを参照して、テーブル構造を見比べてみてください。ちょっと時間がかかりますが、より安心して使えると思います。

ご指摘どおり、「/install/install.sql」とにらめっこしらがらテーブルの変更を完了いたしました。
サイトの方は問題なく動いていたのですが、実はアイテムの編集および保存の際に、SQLエラーが出ていたんですよね~ :oops: columnの追加でエラーも出なくなりました。

最後は地味な作業となりましたが、色々と勉強になりました。
色々とご指導くださった、yama.kymsさん、Mocchiさん、きゃしゃさん本当に最後までありがとうございました。 big_smile

オフライン

#17 2011-01-25 10:41:47

Mocchi
メンバー
登録日: 2006-11-19
投稿: 438

Re: ver.3.51のインストールができません!

neohiro さんの発言:

また、ハッスルサーバー側との構造を比較していたら、「インデックスサイズ」というのにローカル側と違いがありました。

●ハッスルサーバー側

PRIMARY    
bnumber
bshortname

以下のインデックスは同じもののように思われます。いずれかを削除してください

●ローカル側

PRIMARY    
bshortname


ハッスルサーバー側の「bnumber」は、削除してもよろしいのでしょうか?

この件に関して続報です。MySQLマニュアルを参照すると、ひとつのテーブルに複数のインデックスを設定することで、特定のクエリの実行が早まるそうです。「複合インデックス」と呼ばれています。

MySQL4系
http://dev.mysql.com/doc/refman/4.1/ja/ ... dexes.html

MySQL5系
http://dev.mysql.com/doc/refman/5.1/ja/ ... dexes.html

複合インデックスを振ってあるのは、この機能を利用したかったからなんですね。勉強になりました。テーブルのレコード数が激しく多くなければそれほどパフォーマンスに差は出ないと思いますので、このまま使い続けて下さっても構いませんし、インデックスを再度振っていただいても構いません。

オフライン

#18 2011-01-28 09:12:33

neohiro
メンバー
登録日: 2004-06-25
投稿: 150

Re: ver.3.51のインストールができません!

Mocchiさん、お世話になっております。

Mocchi さんの発言:

複合インデックスを振ってあるのは、この機能を利用したかったからなんですね。勉強になりました。テーブルのレコード数が激しく多くなければそれほどパフォーマンスに差は出ないと思いますので、このまま使い続けて下さっても構いませんし、インデックスを再度振っていただいても構いません。

「複合インデックス」というんですね。ハッスルサーバー側で、ダブっているとの指摘を受けたので、ローカル側と同じように「bnumber」を削除しました。
それほどパフォーマンスに差は出ないということなので、このまま運用させていただきます。

ありがとうございました。

オフライン

Board footer