Skip to content

ねたみまん

Webサイト運営の裏側で必要な技術、テクニック、マーケティング、考え方などのメモを記事にしたサイトです

Archive

Category: トラブル

前の記事で、Google Chrome でブックマークの同期が上手くいかない・・・

と書いたが、現在はなんとか解決している。

ブックマークをどのようにして同期させたのかのメモを残しておく。

1. Google Chrome ver.4 以降のブックマークの同期を使うのを諦めて、Xmarks のChrome版を使う。

Chrome標準のブックマークの同期は未だにちゃんと動いていないようだ。
フォルダ名の関係なのだろうか?

前回フォルダが増殖してしまったが、フォルダ内のブックマークもちゃんと同期してくれたXmarksのGoogleChrome版(ベータ版)を使った。

2. 同期したあと、ひとつのPCでブックマークを整理した。

Xmarksでブックマークを同期したあと、沢山増殖したブックマークフォルダを地道に手作業で整理した。
例えば、Firefoxブックマーク というフォルダが3つに増えていて、各フォルダの中身が重複している部分(微妙に中身が異なっているフォルダもあった)を一つにまとめた。

3.  ブックマークを整理して、重複している部分をなくしたあと、Xmarksで再び同期。

4. もう一台のPCでもXmarksでブックマークを同期。

これで、重複している部分(増殖したフォルダ)は綺麗になくなった。

もちろん、GoogleChromeのブックマークの同期は止めておくこと。

・・・

Xmarksのインストールはこちらから

Xmarks.com

トップページの下記の図のChromeマークをクリックすると、GoogleChromeの拡張機能インストール画面になる。

GoogleChromeのブックマーク同期拡張機能 Xmarks

GoogleChromeのブックマーク同期拡張機能 Xmarks

Xmarks拡張機能インストール画面

インストールボタンを押すだけで拡張機能がインストール

Xmarksを使うには、ユーザー登録(無料)が必要。

簡単だから、説明は割愛しますね。

それにしても、同期するというのは、結構難しいものですねー。

ブックマークは、GitとかSubVersionみたいなバージョン管理システムで管理すると便利いいのかもしれないですね。

現在ノートPCとデスクトップPCの2台を使っているのですが、2台使っていると情報の統合をどうするのかって問題に突き当たります。

特に追加、変更が多いブックマークについていつも悩んでいます。

一時はてなブックマークを使っていたんですが、アクセスが遅い事が多く、イライラしたので諦めました。

FireFoxを使っていたときはXMarksという拡張機能を使ってブックマークを同期していました。

これはなかなか便利よく、特に不具合もなくとても使い易かったです。

FireFoxの起動の遅さに見切りをつけて、メインブラウザをGoogleChromeに変更したのですが、今度はブックマークの同期で悩んでいます。

現在悩んでいる状況は

フォルダ内のブックマークが同期されない
ブックマークを追加しても同期されない
同期されるタイミングが分からない

といった症状があり、挙動がよくわからないので困っている状態です。

XMarks のchrome版もベータバージョンであるのですが、こちらもうまく同期せずに、同じフォルダをいくつも作ったりしている状態です。

何か良い手はないものでしょうか?

<追記>

何とか解決した => Google Chrome ブックマークの同期 解決編

Corazón loco / Crazy heart
Creative Commons License photo credit: lepiaf.geo (back mid February)

Djangoをもう少し理解しようと、Djangoドキュメントサイトのチュートリアルをやっていた。
チュートリアル4の前半までは、あまり悩むことも無く、うまくいっていたのだが、最後の汎用ビューで詰まった。

というか、汎用ビューのチュートリアルはちょっとはしょりすぎで良く分からない。

urls.py を書き換えるところまでは問題ない。
で、その後テンプレートも書き換えないといけないんだが、それがかなりはしょられているので分かりにくい。

分かったことをまとめておく。

urls.py は以下の通り

from django.conf.urls.defaults import *
from mysite.polls.models import Poll

info_dict = {
    'queryset': Poll.objects.all()
}

urlpatterns = patterns('',
    (r'^$', 'django.views.generic.list_detail.object_list', info_dict),
    (r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
    url(r'^(?P<object_id>\d+)/results/$',
     'django.views.generic.list_detail.object_detail',
     dict(info_dict, template_name='polls/results.html'), 'poll_results'),
    (r'^(?P<poll_id>\d+)/vote/$', 'mysite.polls.views.vote'),
)

ここで、info_dict で設定された queryset の結果はテンプレートではobject_list として参照できる。
これをチュートリアル中に書いておいて欲しかった。
これが分からないためかなり悩んだんです。

なので、チュートリアルで作っていたテンプレート /mysite/polls/index.html は以下のように書き換えなければいけない。

{% if object_list %}
    <ul>
    {% for poll in object_list %}
        <li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

ついでだから、detailへのリンクを追加しておいた。
こんなもっといい書き方があるかもしれないが、今のところはこの形で。
さらに、汎用ビューのdjango.views.generic.list_detail.object_list は モデル名/モデル名_list.html というテンプレートを呼び出すので、/polls/index.html のファイル名を /polls/poll_list.html に変更しなければならない。
同様に、django.views.generic.list_detail.object_detail は モデル名/モデル名_detail.html というテンプレートを呼び出すので、/polls/detail.html は/polls/poll_list.html にファイル名を変更しておく。

次に、detail のテンプレートは以下のように変更が必要。

<h1>{{ object.question }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<form action="/polls/{{ object.id }}/vote/" method="post">
{% for choice in object.choice_set.all %}
	<input type="radio" name="choice" id="choice{{ forloop.counter }}"
	 value="{{ choice.id }}" />
	<label for="choice{{ forloop.counter }}">{{ choice.choice }}</label><br />
{% endfor %}
<input type="submit" value="投票する" />
</form>

poll で渡されていたオブジェクトが object という汎用名で渡されているので、poll を objectに変更した。

結果を表示するテンプレート /polls/results.html は以下のようになる。

<h1>{{ object.question }}</h1>

<ul>
{% for choice in object.choice_set.all %}
  <li>{{ choice.choice }} -- {{ choice.votes }} 票</li>
{% endfor %}
</ul>
<p><a href="/polls/">投票一覧に戻る</a></p>

これは、urls.py 内でパターンをurl()で設定していて、テンプレートを明示的に設定しているので、テンプレートのファイル名は元のままでOK。

vote部分は汎用ビューを使わないので、views.py 中のvote() が使われる。
vote(request, poll_id)関数内を、汎用ビューにあわせて以下のように変更する必要がある。

def vote(request, poll_id):
    p = get_object_or_404(Poll, pk=poll_id)
    try:
        selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Poll 投票フォームを再表示します。
        return render_to_response('polls/poll_detail.html', {
            'object': p,
            'error_message': "選択肢を選んでいません。",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # ユーザーがBackボタンを押して同じフォームを提出するのを防ぐため
        # POST データを処理できた場合には必ず
        # HttpResponseRedirect を返すようにします。
        return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))

変更点は選択肢が選ばれていないときの render_to_response 部分

        return render_to_response('polls/poll_detail.html', {
            'poll': p,
            'error_message': "選択肢を選んでいません。",
        })

のpoll を onject に変更。(汎用ビュー用にテンプレートをobject で参照するように変更したため)
さらに、reverseするための名前をulrs.py のurl()関数で名前をつけた poll_results に変更している。

以上。

汎用ビューを使おうとしてかなり悩んだ部分をカンタンにまとめておいた。

WordPress 2.8からWordPress2.9への自動アップグレードがうまくいかなくて悩んでいた。

どう上手くいかないのかと言うと

・自動アップグレードのボタンを押すと

ダウンロード中です。

と表示が出たまま止まる。

エラーも出ない状態で、いったい何が起こっているのかわからなかった訳だ。

で、ネット上の情報を探しまくったんだけど、解決策が見つからない。
(他のアップグレードができない例では、エラーが表示されているか、mem_chached を使った場合のみ。問題のサーバではmem_chachedは使用していなかった)
色々と悩んでいたけれども、冷静になってみると、実に簡単に解決した。

何をやったのか

・error log をちゃんと見た。

[Thu Jan 14 17:00:27 2010] [error] [client xxx.xxx.xxx.xxx] PHP Fatal error:  Allowed memory si
ze of 33554432 bytes exhausted (tried to allocate 2804818 bytes) in 以下省略……

とエラーが出ていた。

要するに、PHPがメモリーを使い切っているというエラーらしい。

対処するにはphp.ini の memory_limit を大きくしてやると良いとのことだ。

ということで、早速php.ini の memory_limit がどうなっているのか見てみた。

memory_limit = 32M    ;

ということなので、量を増やしてみる。(適当に32Mから48Mにしてみた。これが適当なのかは今のところ分からない)

memory_limit = 48M ;

PHP についてはほとんど分かっていないので、この後どうやって反映させるのかわからないけど、Apache を再起動すればPHPの設定を読みなおすんじゃないかと思い、Apacheを再起動してみた。

sudo /sbin/service/httpd restart

これで、WordPressの管理画面から自動アップグレードをしてみたところ、実に簡単に自動アップグレードが完了した。

ちょっと拍子抜けた。

PHPもちゃんと勉強しよう。

WordPress2.8からの自動アップグレードが上手くいかない。

なにか設定で足りないところがあるのかなぁ?

zip版をダウンロードしているみたいだけど、解答ができないのかもしれない。

どうすれば、tar.gz版を自動ダウンロードするんでしょうか?

はじめにインストールする時にtar.gz版にしておかないといけないのだろうか。

Blog WebMastered by All in One Webmaster.