sinatraとmechanizeを一緒に使うと動かない(動かす方法が悪いので)

sinatraで今WEBアプリを作っている。
WEBアクセスがあったらMechanizeで別のサイトへデータを取りに行く、みたいなの。

require 'sinatra'
require 'mechanize'

get "/" do
  agent = Mechanize.new
  agent.open("http://example.com")
 #とかなんとか
end

で、これを起動しようとするとエラーになる

$ bundle exec ruby web_main.rb
(省略)/gem/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1497:in `start_server': undefined method `run' for HTTP:Module (NoMethodError)
	from (省略)/gem/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/base.rb:1435:in `run!'
	from (省略)/gem/ruby/2.1.0/gems/sinatra-contrib-1.4.2/lib/sinatra/reloader.rb:252:in `run!'
	from (省略)/gem/ruby/2.1.0/gems/sinatra-1.4.5/lib/sinatra/main.rb:25:in `block in <module:Sinatra>'

メソッド名かなんかが競合しているようだ。

解決方法はStackOverflowに。
ruby - Mechanize & Sinatra conflict - Stack Overflow
まとめると、以下のようにすれば良い。

  • 手段その1. WEBハンドラを最上位に書くんじゃなくてクラスでくるんでやる
class MyApp < Sinatra::Base
  get '/' do
    # mechanize stuff
  end
end
  • 手段その2. Sinatraアプリを動かすサーバをWebrickからThinにする。(やり方はわからんがなんか設定すればできた気がする)

まだ試してないが、なるほどなと思った。

追記:Thinを入れるだけで手段その2が実現できる。簡単なのでこっちでやることにした。

Ubuntu ServerのユーザーディレクトリでPHPが使えるようにする。

以下は2014/10/17にはてなダイアリーに投稿した内容だが、ブログトップに表示されないのではてなブログにも転載することにした。
微妙に修正もしている。(元記事:Ubuntu ServerのユーザーディレクトリでPHPが使えるようにする。 - 橋本幸樹の無愛想な日記
まあ自分用のメモなので転載する意味はそれほど無いような気もする。
以下本文。



Ubuntu 10.04.4 LTSだとphpとユーザディレクトリのモジュールを有効にしただけではユーザディレクトリにPHPスクリプトを置いても実行されずにスクリプトがダウンロードされてしまう。

以下の設定ファイルを編集し、apacheを再起動すると動いてくれる。

  • /etc/apache2/mods-available/php5.conf

編集前

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
  SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
  SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    <IfModule mod_userdir.c>
        <Directory /home/*/public_html>
            php_admin_value engine Off
        </Directory>
    </IfModule>
</IfModule>
~                   

編集後

<IfModule mod_php5.c>
    <FilesMatch "\.ph(p3?|tml)$">
  SetHandler application/x-httpd-php
    </FilesMatch>
    <FilesMatch "\.phps$">
  SetHandler application/x-httpd-php-source
    </FilesMatch>
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    #<IfModule mod_userdir.c>
    #    <Directory /home/*/public_html>
    #        php_admin_value engine Off
    #    </Directory>
    #</IfModule>
</IfModule>

つまり、"<IfModule mod_userdir.c\>"のブロックをコメントアウトする。
"php_admin_value engine Off"という命令によってユーザディレクトリでのPHPの実行が抑制されているようだが、"php_admin_value engine On"にしてもPHPスクリプトへのアクセス時にサーバーエラーになってしまい実行できない。ブロック全体をコメントアウトまたは削除する必要がある。(よく読むとこのファイルのコメントにそう書いてある。)

CKEditor for WordPressをアップデートしたらボタンのカスタマイズ設定のやり方が微妙に変わっていた

WEB系の人に戻ったので最近はWordPressをいじることもある。

WordPressプラグインとして動作するCKEditor for WordPress というWYSIWYGエディタを4.0から4.4.4にアップデートしたところ、ツールバーボタンの表示のカスタマイズ設定が全部消えてデフォルトに戻っていた。

設定ファイル(ckeditor.confing.js)をバックアップしていたもので上書きしたが、今度はツールバーボタンがひとつも表示されなくなった。それで以下のページなどを見ながらあーでもないこーでもないとやっていた。

CKEditor4のボタンをカスタマイズしてみよう!(WordPress編) | Webcre Archive

 

で、わかったのは設定を入れる変数名が4.0と4.4.4では違うということだった。

つまり、

  • 4.0は config.toolbarGroups または config.toolbar_WordpressFull
  • 4.4.4はconfig.toolbar_WordpressFullのみ

config.toolbarGroupsはデフォルトの設定ファイルにも書かれていて、普通なら設定変更はこれを書き換えるやり方でしたくなると思う。

config.toolbar_WordpressFullの方は設定ファイルの他の部分やCKEditorの設定画面を見ながら類推して気づいた。あちこち検索したページの中にもひょっとしたらあったかもしれないけど。

もともとのうちの設定はconfig.toolbarGroupsに入っていたので4.4.4では何にも表示されないということだった。

このへんの変化について書いてあるドキュメントも特に見つからず、たったこれだけのことでえらい苦労をした。まあこの手の作業ではよくあることだけれど。他にも色々言いたいがもうこれ以上言うまい。疲れた。