« 2012年8月 | トップページ | 2013年1月 »

2012年12月

2012年12月16日 (日)

Centos6でgemパッケージを作ってrubygems.orgで公開してみた

ちょっとRubyスクリプトを共有したくて、gemパッケージの作り方を調べたのでメモ。

パッケージを作る方法として、newgemやjeweler, bundlerがあり、どれを使うの良いのかなかなか解らなかったのだが、最近は bundler が新しいらしい。
 
そして、公開方法もrubyforgeに登録する方法、githubを使って公開する方法、rubygems.orgに登録する方法が検索結果に出てきて大いに混乱したが、rubygems.orgに登録する方法が最近の本流っぽい。
 
そして、bundlerを使った場合、バージョン管理がgitになるのだが、githubとの連携でもはまった。pushでエラーが出て、さんざん調べた結果gitのバージョンが古いとダメなことが解ったのだが、Centos6でyumをつかってgitをインストールするとVer1.7.1しか入らず、rpmパッケージを探して入れなおす必要があった。
 
今回作ったのは yggdrasil というもの。現状はHello Worldのみ。今後作りこむ予定。
レアな単語でキーワードとして識別しやすいと思うので、以下、コマンド等でそのまま使います。
 
 
● まず、gitのバージョンアップのメモ(Centos6)
 
# git --version              ←バージョン確認
# yum erase git
# yum update perl
# yum install subversion-perl
# yum install perl-YAML
# wget http://pkgs.repoforge.org/git/perl-Git-1.7.11.3-1.el6.rfx.x86_64.rpm
# wget http://pkgs.repoforge.org/git/git-1.7.11.3-1.el6.rfx.x86_64.rpm
# rpm -Uvh perl-Git-1.7.11.3-1.el6.rfx.x86_64.rpm git-1.7.11.3-1.el6.rfx.x86_64.rpm
 
● gemパッケージを作る手順
 
$ gem install bundler              ← Redmine(Rails)の環境を作る時に入れてあった

$ bundle gem yggdrasil           ← yggdrasilディレクトリが出来て雛形が作られる
$ cd yggdrasil

$ vi yggdrasil.gemspec            ← TODOが書かれている箇所等適当に変更

$ vi lib/yggdrasil/version.rb     ← リリースする前にバージョンを変える

$ midir bin
$ vi bin/yggdrasil                  ← 実行コマンドを作るときはbinの下にコマンドを作る
$ cat bin/yggdrasil                ← まずはHello Worldでお試し
#!/usr/bin/env ruby
puts 'Hello World!'

$ git add .

$ git commit -a -m 'initial commit'  ← コミットしないとパッケージに含められないみたい

$ rake build    ← これでpkg/yggdrasil-0.0.0.gem が作られる

# gem install ~/yggdrasil/pkg/yggdrasil-0.0.0.gem  ← gemインストールの動作確認

# yggdrasil     ← インストールされたコマンドの動作確認
Hello World!

# gem uninstall yggdrasil  ←  消しておく

● githubでのコード管理
予めgithubでユーザ登録をして、空のgitリポジトリを用意しておく必要があります。

$ git remote add origin https://github.com/tkusukawa/yggdrasil.git  ← 作ったリポを指定
$ git push -u origin master   ← ここでgithubのID/PWを聞かれます

● rubygems.orgで世界公開
こちらも予めrubygems.orgでユーザ登録しておく必要があります。
 
$ rake release     ← githubのID/PWの後、下記のように失敗する
yggdrasil 0.0.0 built to pkg/yggdrasil-0.0.0.gem
Tagged v0.0.0
Username for 'https://github.com': tkusukawa
Password for 'https://tkusukawa@github.com':
Username for 'https://github.com': tkusukawa
Password for 'https://tkusukawa@github.com':
Pushed git commits and tags
Untagged v0.0.0 due to error
rake aborted!
Your rubygems.org credentials aren't set. Run `gem push` to set them.
Tasks: TOP => release
(See full trace by running task with --trace)
 
$ gem push       ← エラーに従ってやってみるが、これもエラーになる
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at http://rubygems.org/sign_up
   Email:   t.kusukawa@gmail.com
Password:   
Pushing gem to https://rubygems.org...
Signed in.
ERROR:  While executing gem ... (Gem::CommandLineError)
    Please specify a gem name on the command line (e.g. gem build GEMNAME)
 
$ rake release          ← もう一回やってみたらうまく行った。
yggdrasil 0.0.0 built to pkg/yggdrasil-0.0.0.gem
Tagged v0.0.0
Username for 'https://github.com': tkusukawa
Password for 'https://tkusukawa@github.com':
Username for 'https://github.com': tkusukawa
Password for 'https://tkusukawa@github.com':
Pushed git commits and tags
Pushed yggdrasil 0.0.0 to rubygems.org
 
● 公開gem動作確認
 
# gem install yggdrasil
# yggdrasil
# gem uninstall yggdrasil
 
こんな感じでプロジェクトのベースがようやくできたが、まる1日かかった。とほほ。

| | コメント (0) | トラックバック (0)

2012年12月 6日 (木)

Redmineでphpをリポジトリ表示すると文字化けする

Redmine2.1.4 を入れたのだが、
phpのファイルをリポジトリ表示すると
日本語が文字化けしていた。

原因は Coderay がphpをうまく処理できないためらしい。
そこで、プログラムを変えて無理やり
ファイルタイプがphpだった場合は、
java_script として解釈させることにした。
redmine/lib/redmine/syntax_highlighting.rb
*** 40,51 ****
--- 40,53 ----
          # Should not return line numbers nor outer pre tag
          def highlight_by_filename(text, filename)
            language = ::CodeRay::FileType[filename]
+           language = :java_script if language == 'php' || language == :php
            language ? ::CodeRay.scan(text, language).html(:break_lines => true) : ERB::Util.h(text)
          end
  
          # Highlights +text+ using +language+ syntax
          # Should not return outer pre tag
          def highlight_by_language(text, language)
+           language = :java_script if language == 'php' || language == :php
            ::CodeRay.scan(text, language).html(:wrap => :span)
          end
        end

| | コメント (1) | トラックバック (0)

« 2012年8月 | トップページ | 2013年1月 »