Wysihatエディタを使う(続き)
カスタマイズの仕方
なんとなくわかってきた。script/generate wysihatで生成されるwysihat_engine_pack.jsはいい感じに圧縮されているので見る気はしないのと、あとカスタマイズできないじゃんと思っていましたが、オプションでソース出力もしてくれるらしい。
がんばってgeneratorのソース見てみたけど、--helpでオプション見れるんだね。
$ script/generate wysihat --help $ script/generate wysihat --include-js-src
wysihat_engine_pack.js はfacebox + wysihat + wysihat_engineということらしい。なので、こいつらを読み込む場合はこうする
<%= javascript_include_tag :defaults, 'facebox', 'wysihat', 'wysihat_engine' %>
faceboxをインクルードするのを忘れててちょっと困った。
出力されたものをみていこう
まず画像。facebox(ポップアップ画面のやつかな)とwysihatのやつ。wysihatの方はツールバーのアイコンです。
css/でwysihatツールバーのアイコンを指定していた(これがわからなくて困ってました。。)。ヘルパーメソッドのwysihat_editorに配列でツールバーのアイテムを渡せるんだけど、全部びっくりマークアイコンになっていたのはそうゆうことだったのか、というのがここを見るとわかる。
カスタマイズしている部分は、wysihat_engine.jsかな。
function wysiHatify(tag_id, buttons){
tag_idはたぶんテキストエリアのid。buttonsはツールバーのボタンたちだと思われる。
buttons.each(function(button){ switch(button.toLowerCase()){ case 'image': toolbar.addButton({label : button.gsub('_','-').camelize().capitalize() , handler: function(editor) { return editor.faceboxFile(editor); }}); (略) default: toolbar.addButton({label : button.gsub('_','-').camelize().capitalize()}); } });
buttons.eachがrubyっぽくていい感じ。
ハンドラをここで設定している模様。ただし、ここでは主にfaceboxを使った拡張機能のハンドラ設定しかしていないので、たとえばundo/redoなどのボタンはdefaultの方に流れていくはず。どこでハンドラを登録しているのか。
わかった
wysihat.jsのbuttonHandlerメソッドがキモだった。
function buttonHandler(name, options) { if (options.handler) return options.handler; else if (options.get('handler')) return options.get('handler'); else return function(editor) { editor.execCommand(name); }; }
toolbar.addButtonメソッドでハンドラが設定されている場合にはそれが使われる。ハンドラが未設定の場合には、デフォルトのハンドラ(elseのところ)が用意される。自前ボタンを用意するには、wysihat_editorメソッドの呼び出しとwysihat_engine.jsの拡張が必要になりそう(ついでに、ボタンアイコンを用意してwysihat.cssも更新する)
続きは明日。
ファイルアップロード
自前で
作ってみる。もちろんwebを参考にするけど。なんかディレクトリを深く深く掘っていくところとか、あんまり気にくわないので。
プロジェクト
$ rails uploader $ script/generate scaffold picture title:string uri:string
ビュー
<% form_for @picture, :html => {:multipart => true}) do |f| %> (略) <%= file_field :upload, 'file' %> (略) <% end %>
コントローラ
uploaded_file = params[:upload] File.open("xxxx.jpg", "wb") do |file| file.write upload_file[:file].read end
こんな感じでなんか動きました
参考にしました
- Ruby on Rails: ファイルアップロード機能を作る(http://negisio.net/?p=30)
WysiHatを使う続き
ImageMagickとRMagickをインストールする
$ sudo apt-get update $ sudo apt-get install imagemagick libmagick9-dev $ sudo gem install rmagick
アップデートしないとrmagickが入らないらしいので、apt-get update しました。
で、
できました。Hatena.vim使ってるから画像をアップロードできませんが、動きはこんな感じ。
- カスタマイズ可能なように初期インターフェースはかなりシンプルだと思っていたwysihat-engineですが、なにげに結構いじれる。(ボールド)(イタリック)(アンダーライン)(取り消し線)(左寄せ/右寄せ/中央寄せ)(箇条書き/段落)(アンドゥ/リドゥ)(リンク)(ソース<html>の直接編集)(画像アップロード/貼り付け)
- ためしにとかやってみたけどうまいことエスケープしてくれた。おそらくDBへの保存時になんかやってるっぽい
- 画像はpublic/system/files/:id/original/(ファイル名)として保存される。ってことは日本語名はだめか?
- 記事を消しても画像は消してくれない。自分で管理しないとだめなんだろうね
- アップロード画面には登録されている画像の一覧がでてくる模様。いっぱいになることを考慮しているのかな?
- アップロード画面で簡易的に画像の管理ができるっぽい。ここで画像を削除した場合にはファイルごと消えるよ
- ちなみに、DB上ではwysihat_filesテーブルという名前で管理されているよ
つまり、画像自体は記事とリンクしているわけではないため、どの記事からでも参照することができる。その代わりに画像の管理は自分でやってあげないといけないっていうわけです(きっと)。
参考にしました
- Ubuntu Hardy に ImageMagick と RMagick をインストールする(http://blog.champierre.com/archives/832)
37signals製WYSIWYGエディタを使ってみる
wysihat-engineプラグインを使ってみる
rails用のプラグインとして、wysihat-engineというものを使うと、WysiHatが簡単に導入できるらしい。が、ぐぐっても情報が少ないので、備忘録としてメモ
とは言え、基本的にはhttp://github.com/80beans/wysihat-engine/に書いてある通りにやっていけばできるはず。「はず」というのはその通りにやらなかったため。そのせいでいろいろめんどうな手順を踏んだ(と思う)
script/plugin でプラグインをインストール(gemって全体に影響するからなんか好きじゃない)
$ script/plugin install git://github.com/80beans/wysihat-engine/
生成
$ script/generate wysihat $ rake db:migrate
なんかが作られる。
javascriptとstylesheetはとりあえずapplication.html.erbで読み込むようにしといた。
<%= javascript_include_tag :defaults, 'wysihat_engine_pack' %> <%= stylesheet_link_tag 'facebox', 'wysihat' %>
最後にビュー。f.wysihat_editor というメソッドが使えるようになるらしい
<% form_for(@model) do |f| %> <%= f.wysihat_editor :content %> <% end %>
これでできるはず
だったけど、wysihat_editorがないとか言われた。やっぱりgemでインストールしないとダメなのかな。
対策1
無理やりrequireする。どうもwysihat_editorメソッドが定義されているプラグインフォルダのlib/wysihat_engine.rbが読み込まれていない模様。プラグインフォルダ下にinit.rbを作って無理やりrequireしてみた。
require 'wysihat-engine'
だめ。paperclipをrequireできないとか言われた。paperclipっていうのは画像アップロード用のプラグインらしい。ImageMagickもいるとか。めんどくさい。。
対策2
$ script/plugin install git://github.com/thoughtbot/paperclip.git $ script/server
動いた!でも、ImageMagick入れてないからファイルのアップロードはできないんだろうなぁ。それは明日やろう。終わり。
Ubuntu9.10新規インストール
やりなおし
VMWarePlayer3 に Ubuntu9.10 を入れ直す。とりあえずいろいろ作業できるところまで持っていく
vim のカスタマイズ(その1)
$ sudo apt-get install vim-gnome $ sudo apt-get install git-core $ git clone git://github.com/motemen/hatena-vim.git $ mkdir ~/.vim $ cp -r hatena-vim/ ~/.vim
~/.vimrcをはてな用にいじくる
" for Hatena.vim :set runtimepath+=$HOME/.vim/hatena-vim :let g:hatena_user='nukky_1981'
vimのカスタマイズ(その3)
vimrcをいじくって使いやすく。いろいろなところを見つつ最低限の変更のみ
" for Hatena.vim set runtimepath+=$HOME/.vim/hatena-vim let g:hatena_user='nukky_1981' " NERD_commenter.vim mapc ,c let NERDSpaceDelims=1 " vim-ruby.vim imap "Rubyのオムニ補完を設定(ft-ruby-omni) :setlocal omnifunc=syntaxcomplete#Complete let g:rubycomplete_buffer_loading = 1 let g:rubycomplete_classes_in_global = 1 let g:rubycomplete_rails = 1 "基本 set number set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ [LINES=%L] set laststatus=2 syntax on filetype indent on filetype plugin on
$HOME/.vim/ftplugin/ruby.vimに追記
set expandtab set tabstop=2 shiftwidth=2 softtabstop=2 set autoindent
refeを使おう
sudo gem install refe
refe.vimというすごいのがあった
$ wget http://rails2u.com/projects/refe.vim/refe.vba $ vim -c 'so %' refe.vba
参考ページ
- hatena.vimを導入してvimからはてなダイアリーを更新したメモ - 今日もスミマセン。(http://d.hatena.ne.jp/snaka72/20090124/1232801656)
hatena.vimを使ってみたよ
hatena.vim
すごくイイ。これを使うとほんとにメモ気分ではてなダイアリーを更新できるね
Capstranoに挑戦する(2)
続き
Capistranoをインストール
$ sudo gem install capistrano
チェックアウトしたRailsアプリのフォルダで
$ capify .
すると、なんかファイルが作られる
config/deploy.rb を編集すればいいらしい
# リポジトリの場所 set :repository, "file:///home/{user_name}/svn/rails1/trunk" # デプロイ先 set :deploy_to, "/home/{user_name}/deploy/test1" # (たぶん)SSHログイン時のユーザ名 set :user, "{user_name}" # root権限で実行するか(trueにする意味がよくわからないが、 # デフォルトはtrueっぽい) set :use_sudo, false # よくわかってない。passengerの再起動はtask :restartでrestart.txtを置くことで行われるみたい namespace :deploy do [:start, :stop].each do |t| desc "#{t} task is a no-op with mod_rails" task t, :roles => :app do ; end end task :restart, :roles => :app, :except => { :no_release => true } do run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" end end
/etc/apache2/sites-enabled/000-defaultを編集
DocumentRoot /home/{user_name}/deploy/test1/current/public
初回のみ。deploy先に必要なフォルダを作成している。このデプロイ先のなかでさらに世代管理してくれるらしい
[set :use_sudo, false]しとかないと、作られるフォルダはroot所有となる
$ cap deploy:setup
リポジトリから最新の環境を取得し、さらにproductionモードでマイグレーションまでしてくれる(この作業は:userが行うので、deploy:setupで作ったフォルダがrootさんのものだと、Permission deniedとか言われる。ハマった
$ cap deploy:cold
サーバが起動されるはずですが、なにも設定していないので当然ながら動かず。
手動でApacheを起動する
$ cap deploy:start $ sudo /etc/init.d/apache2 start
次に、ちょっとだけtrunkの中身を変更、コミットした上で稼働中のサーバにデプロイしてみる
コミットまでは省略
$ cap deploy
再起動までやってくれるみたい。ただ、マイグレーションは行ってくれない(当たり前か)
リポジトリにデータベースファイル(sqlite3使ってるので)も含まれてるので、deployしたところで古いのが消えてしまったようです
-> マイグレーションまでする場合は[cap deploy:cold]、ソースのとっかえだけなら[cap deploy]と覚えるといいそうな
参考ページ(お世話になりました)
- UbuntuにSubversionでも入れてバージョン管理でもしてみる(http://blog.riywo.com/2008/04/01/054421)
- ubuntu serverのインストール(http://www.lowlevellife.com/?p=151)
- バージョン管理ツールSubversionで使えるsvnコマンドのまとめ(http://it.kndb.jp/entry/show/id/659)
- Railsの一時ファイルをsubversionの管理から外すコマンド(http://gry.sakura.ne.jp/2009/06/02/rails%e3%81%ae%e4%b8%80%e6%99%82%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92subversion%e3%81%ae%e7%ae%a1%e7%90%86%e3%81%8b%e3%82%89%e5%a4%96%e3%81%99%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89/)
- Rails勉強会@東京 第15回(http://yugui.jp/articles/589)
- Capistrano(2)(http://d.hatena.ne.jp/garbagetown/20090518/1242662637)