Quantcast
Channel: uedakoの日記
Viewing all 40 articles
Browse latest View live

[Redmine]RedmineのチケットCSV出力時に履歴も一緒に表示させたい

$
0
0

RedmineのチケットにQAも載せてます。


が、しかし、Redmineのサーバは社外公開していないので、

お客さんに見せるときには何かに変換しないといけない。


定番なのはExcelなので、CSV出力が良いかなーと思ったのだけど、

チケットの履歴が出てくれないんですよね。

残念(>_<



と思ってgoogle先生に聞いてみると


履歴付チケット一覧出力プラグインを書いてみた - すえひろがりっっっっ!


と、pluginを作っている方のページがヒット。


試してみましたが、ばっちり望み通りの動作でした。


感謝感謝。


[linux]Linuxのネットワーク設定

$
0
0

Linuxのネットワーク設定

いつもGUIからやっちゃうので、メモしておく

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
BOOTPROTO=none
HWADDR=00:00:00:00:00:00
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.1.10
GATEWAY=192.168.1.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes

/etc/resolv.conf

nameserver 192.168.100.1
nameserver 192.168.100.253


# service network restart



なんかこんな感じ

[Redmine]RedmineでチケットをCSVで一括登録する

$
0
0

すんごいハマったので、メモ。


Redmineでチケットを一括登録したい。


やはりCSVから一括登録出来たらいいよね、とgoogle先生に聞きまくって、

最終的にたどり着いたのが↓のサイト


http://daily-postit.blogspot.com/2010/11/redmine-importer.html



どうも、RedmineのCSVインポートのpluginはいろんな人が派生させて作っていて、

Redmineのバージョンによって使えたり、り使えなかったり、日本語がだめだったり、

とまぁ3日間ハマりっぱなしでした。


最終的には、上記サイトに書いてあるpluginを使うことでうまくいきました。


ちなみに自分の使っているRedmineのバージョンは

「Redmine 1.1.1.stable」

というやつでした。



インストールはそのままとはいかなくて、


0.依存モジュールを設定

 Redmine CSV Import Pluginを試す | 『世界』はあまりにも広い

にある通り、

依存するのがfastercsvなので必要であれば「gem install fastercsv」しておく。

 fastercsvをインストールしておく


1.gitHUBから、pluginをダウンロードする

  上記サイト内の「そちらに変更分を登録してみました」にリンクがあります

  自分の場合は

# wget --no-check-certificate https://github.com/akiko-pusu/redmine_importer/tarball/master

  こんな感じでダウンロード

2.とりあえず解凍して、ディレクトリ名を変えてRedmineに配置

# tar -zxvf akiko-pusu-redmine_importer-7dd533d.tar.gz
# mv akiko-pusu-redmine_importer-7dd533d redmine_importer
# mv redmine_importer /var/lib/redmine/vendor/plugin

  ディレクトリ名をredmine_importerにしないと、plugin実行時に↓のように怒られました(^^;

log/production.logの中身

ActionView::TemplateError (No plugin called 'redmine_importer' - please use the full name of a loaded plugin.) on line #2 of vendor/plugins/akiko-pusu-redmine_importer/app/views/importer/match.html.erb:
1: <% content_for :header_tags do %>
2:     <%= stylesheet_link_tag 'importer', :plugin => 'redmine_importer' %>
3: <% end %>
4:
5: <h2><%= l(:label_match_columns) %></h2>

    vendor/plugins/akiko-pusu-redmine_importer/app/views/importer/match.html.erb:2
    app/helpers/application_helper.rb:856:in `content_for'
    vendor/plugins/akiko-pusu-redmine_importer/app/views/importer/match.html.erb:1
    passenger (3.0.2) lib/phusion_passenger/rack/request_handler.rb:96:in `process_request'
 ・
 ・
 ・


3.言語ファイルを修正

 なぜか英語の言語ファイルの形式が変になっていたので修正

# cd /var/lib/redmine
# cd vendor/plugins/redmine_importer/
# cd config/locales/
# vi en.yml

 最後の2行の先頭に、スペースを2つ入れる

 これをしないと、サーバ再起動後、Redmineのサイトを見ると

Ruby on Rails application could not be started
These are the possible causes:
There may be a syntax error in the application's code. Please check for such errors and fix them.
A required library may not installed. Please install all libraries that this application requires.
The application may not be properly configured. Please check whether all configuration files are written correctly, fix any incorrect configurations, and restart this application.
A service that the application relies on (such as the database server or the Ferret search engine server) may not have been started. Please start that service.
Further information about the error may have been written to the application's log file. Please check it in order to analyse the problem.
Error message:
undefined method `deep_symbolize_keys' for "Save match rules and submit":String
Exception class:
NoMethodError
Application root:
/var/lib/redmine

 という、むらさきっぽいエラー画面が表示されてしまう。


4.サーバ再起動

 これでインストール終わり。

 自分はApacheで使っているので、Apacheを再起動

# service httpd restart

5.実際にインポート

 Redmineのページからプロジェクトの設定画面へ行き、

 モジュールタブから「Importer」にチェックし保存する。


 するとプロジェクトの目―ニューに「インポート」が出てくるはず。


 実際のインポートは、いろんなサイトに書いてある通り、チケットのCSV出力した

そのままの形式でインポート可能でした

 直すところは

  ・ユーザ名を設定するところは、名前でなくてユーザIDを使う

  ・日付は yyyy-mm-dd

ぐらいでした。

 他のサイトでは「CSVのカラムを必ず""で括らないといけない」とか

書いてありましたけど、特にそんなことなかったです。



 ほんと3日間かけて何にも成果出せてなかったので、うまくいってホント良かった(;_;

[Redmine]redmine_importer で 親チケット情報も登録する

$
0
0

redmine_importeでCSVデータの一括登録出来たよ(^^



とおもってたら、どうも親チケットの登録が出来ないみたい、、、

親チケットは最近の機能だから仕方がないのかな。



でも、どうしても親チケットの登録がしたかったので、pluginの修正を行ってみました

rubyもrailsも分かんないけど、何とかなったよ。



編集ファイルは

/var/lib/redmine/vendor/plugins/redmine_importer/app/controllers/importer_controller.rb


1.ファイルの先頭あたりにあるISSUE_ATTRSの内容を修正

  ISSUE_ATTRS = [:id, :subject, :parent_issue, :assigned_to, :fixed_version,
    :author, :description, :category, :priority, :tracker, :status,
    :start_date, :due_date, :done_ratio, :estimated_hours]

 配列(?)の中に :parent_issue を追加する

 これで、インポート時の選択肢に「親チケット」が出るようになる



2.222行目あたりの「# optional attributes」コメントの下に以下の行を追加

      issue.parent_issue_id = row[attrs_map["parent_issue" || issue.parent_issue_id

これで新規登録のチケットは、親チケットの情報が登録されるようになりました。





が、既存チケットの更新の際はエラーになります。



まぁ、更新は今のところ使わないので、とりあえずこれで使ってみます。

[雑記]Google翻訳API の制限文字数

ぱっくぱく

$
0
0

まるまるぱくっとほんのソース

跡で消す

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Threading;
using System.Net.Sockets;
using System.Net;

namespace SocketServer
{
    delegate void SamDelegate(object obj);

    public partial class Form1 : Form
    {
        Form1 _form;

        public Form1(Form1 form)
        {
            InitializeComponent();
            _form = form;
        }


        public  volatile bool flag = false;


        IList<WorkProc> Session = new List<WorkProc>();
        int port = 0;

        public int Port { set { port = value; } }

        private void BtnStart_Click(object sender, EventArgs e)
        {
            flag = true;

            Form1 server = new Form1(this);
            server.Port = Int32.Parse(TxtPort.Text);

            Thread t = new Thread(new ThreadStart(server.StartServer));
            t.IsBackground = true;
            t.Start();

            BtnStart.Enabled = false;
            BtnStop.Enabled = true;
        }

        private void BtnStop_Click(object sender, EventArgs e)
        {
            flag = false;

            try
            {
                TcpClient client = new TcpClient(
                    GetLocalAddr().ToString(), 
                    Int32.Parse(TxtPort.Text));

                client.Close();
            }
            catch (Exception ex) 
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                MessageBox.Show(ex.Message);
            }

            for (int i = Session.Count - 1; i >= 0; i--)
            {
                Session[i].LocalSocket.Shutdown(SocketShutdown.Both);
                Session[i].LocalSocket.Close();
            }


            BtnStart.Enabled = true;
            BtnStop.Enabled = false;

            RtbShow.AppendText("Server Stop\n");
        }

        private IPAddress GetLocalAddr()
        {
            //foreach (IPAddress addr in Dns.GetHostAddresses(Dns.GetHostName()))
            //{
            //    if (addr.AddressFamily == AddressFamily.InterNetwork)
            //    {
            //        return addr;
            //    }
            //}
            return IPAddress.Parse("127.0.0.1");
        }

        public void StartServer()
        {
            try
            {
                IPEndPoint ipEndPoint = new IPEndPoint(GetLocalAddr(), port);

                Socket socket = new Socket(
                    AddressFamily.InterNetwork,
                    SocketType.Stream,
                    ProtocolType.Tcp);

                socket.Bind(ipEndPoint);

                socket.Listen(10);

                _form.Invoke(new SamDelegate(_form.SetText), string.Format("startServer {0}:{1}\r\n", ipEndPoint.Address, ipEndPoint.Port));

                while (true)
                {
                    Socket s = socket.Accept();

                    if (!_form.flag)
                    {
                        s.Close();
                        break;
                    }

                    if (s.Connected)
                    {
                        WorkProc proc = new WorkProc(_form);
                        proc.LocalSocket = s;
                        proc.ID = Guid.NewGuid();

                        Thread work = new Thread(new ThreadStart(proc.Run));
                        work.IsBackground = true;
                        work.Start();

                    }
                }
                socket.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
                MessageBox.Show(ex.Message);
            }
        }

        public void SetText(object obj)
        {
            RtbShow.AppendText((string)obj);
        }

        public void AddSession(object obj)
        {
            Session.Add(obj as WorkProc);
        }

        public void RemoveSession(object obj)
        {
            for (int i = 0; i < Session.Count; i++)
            {
                if (Session[i].ID == (obj as WorkProc).ID)
                {
                    Session.RemoveAt(i);
                }
            }
        }


        class WorkProc
        {

            public Socket LocalSocket { get; set; }


            Form1 _form;

            public WorkProc(Form1 form)
            {
                _form = form;
            }

            public Guid ID { get; set; }

            public void Run()
            {
                string msg = string.Empty;

                string ip = ((IPEndPoint)LocalSocket.RemoteEndPoint).Address.ToString();
                _form.Invoke(new SamDelegate(_form.SetText), "Connetcted " + ip + "\r\n");
                _form.Invoke(new SamDelegate(_form.AddSession), this);

                int bytes = 0;
                byte[] bb = new byte[1024];

                try
                {
                    do
                    {
                        bytes = LocalSocket.Receive(bb, bb.Length, SocketFlags.None);
                        LocalSocket.Send(bb, bytes, SocketFlags.None);

                        msg = Encoding.UTF8.GetString(bb, 0, bytes);
                        _form.Invoke(new SamDelegate(_form.SetText), msg);
                    } while (bytes > 0 && !msg.Equals("quit\r\n"));

                    LocalSocket.Shutdown(SocketShutdown.Both);
                    LocalSocket.Close();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                    MessageBox.Show(ex.Message);
                }

                _form.Invoke(new SamDelegate(_form.SetText), "Disconnected " + ip + "\r\n");
                _form.Invoke(new SamDelegate(_form.RemoveSession), this);

            }
        }

    }
}

[ruby][rails]突然の Rails

$
0
0

突然の Rails。

Rails のお仕事があったので、頑張る。

以下適当。いますんごい眠いんで超適当。メモ代わりに残す。




最初、DB 構造を考えて、ER 図書いて DDL でばーっとテーブル作ったんだけど、

Rails って DDL からテーブル作るんじゃなくて

> rails generate model Hoge code:ineteger name:string

みたいに、generate でテーブルを作って行く開発スタイルなんでしょうか?



もう、ER 図も作って、foreign key も貼って、DDL 作ったんだけどなぁ、、、

頑張って Rails の規則に沿ったテーブル名や項目名にしたのになぁ、、、

rails g model 、、、 ってテーブル分やらんといけないのかなぁ、、、、



ddl で DB にテーブル作っちゃったので、DB の情報から自動で Rails の model って作成できないのだろうか?

google 先生に聞いてみたところ、以下の情報にヒット


http://kagen88.blogspot.jp/2012/12/rails.html


「Rails のクラス使って、DB 情報引っこ抜いて、rails g model hogehoge コマンドをつくればいいよ」って感じかしら。


ならば、と早速試すも、

「si_cols = ActiveRecord::Base.connection.columns(si_table_name,"#{name} Columns")」

でエラーになる。

windows と Ruby 2.0 と Rails 4.0 ではだめなのか― (>_<


というわけで、載ってた Ruby スクリプトを変更。

Ruby 初めてだから超適当。すごい適当。

とりあえず DB からテーブル全部引っこ抜けぇ

def model_name(s)
  if s[-4..-1] == "ries" 
    s[0..-4] + "y" 
  elsif s[-1] == "s" 
    s[0..-2]
  else
    s
  end
end

def out_generate
  si_tables = ActiveRecord::Base.connection.tables()
  si_tables.each do |t|

    si_tname = model_name(t)
    si_cols = ActiveRecord::Base.connection.columns(t)
    si_field_names = Array.new;
    si_cols.each do |c|
      si_field_names << "#{c.name}:#{c.type}" if c.name != "id" && c.name != "created_at" && c.name != "updated_at" 
    end
    si_colparas = si_field_names.join(' ')

    puts "rails g scaffold #{si_tname} #{si_colparas}" 
  end
  return "";
end


コマンドプロンプトから

> cd [Rails プロジェクトのディレクトリ]

> rails console

で rails のコンソールにして、上のコードを貼りつけ。


その後、out_generate() ってやれば

rails g scaffold user login_id:string name:string password:string

みたいな文字列がコンソールに表示されるから、コンソールの内容コピーして、

Rails コンソール抜けて、

貼りつけるといけるんじゃないだろうか。







でも、ER 図作る時に、一生懸命 Unique Kye とか Default とか付けたのに

model に反映されない。

foreign key も一生懸命付けたのに、model に反映されない。


さみしいなぁ。


生成された model にいちいち手で制約とか書いていかないといけないのか、、、、

うーん。いまいち。

[ruby][rails]DB の スキーマー定義から schema.rb を作る


[ruby][rails]rails で foreign key はどやる

$
0
0

ちょっとギブアップぎみ

メモとして残す


ためになったのは以下のサイト

http://www.katawara.com/2008/use_foreign_key/

http://blog.eiel.info/blog/2013/04/08/foreign-key-constrait-on-rails/

http://d.hatena.ne.jp/iriya_0624/20130427/1367082310

とりあえず、foreign key が作れることはわかった。

plugin 使うと、いろいろ自動化してくれるらしいこともわかった。



http://aligach.net/diary/20110224.html

に書いてあった

リレーションシップ≠foreign key

という考えにのっとると、

Rails としては、テーブル間の関連は、model に書いてあげるのがやっぱり正解なんだろうなぁ。



http://codenote.net/ruby/rails/1094.html

によると

rails g model tester title:string user:references

のように「references」を使うことで、関連をていぎできるみたい。

これはこれで便利そう。

[ruby][rails]windows の 64bit で ruby は茨の道?

$
0
0

windows の 64bit で ruby は茨の道?


windows 7 64bi と truby 2.0 と Rails 4.0 の組み合わせて

ruby tutorial (http://ruby.railstutorial.org/ruby-on-rails-tutorial-book)

をやろうとしてるんだけど、

まぁ、なんというか、どうにもこうにも、うまくいかないことが多い


・nokogiri が入らない

 これは、Windows 環境だからか。

 

 ここの内容が参考になった

 http://www.kaoriya.net/blog/2013/03/29/


 んが、自分の環境では libxslt がコンパイルできない。

 

 いろいろ調べた結果

 http://www.zlatkovic.com/libxml.en.html

 から、コンパイル済みのモジュールを落としてきて、gem をたたいて何とかなった。

 落とすモジュールは、自分の場合は3つだった

  iconv

  libxml

  libxslt

 んで、適当なフォルダに解凍して、gem コマンド。

 自分の場合は

  --with-xml2-dir

  --with-xslt-dir

  -with-iconv-dir

 オプションで、解凍したフォルダを指定した。

 gem install nokogiri --platform=ruby -- --with-xml2-dir=C:/tool/Develop/ruby/lib/libxml --with-xslt-dir=C:/tool/Develop/ruby/lib/libxslt --with-iconv-dir=C:/tool/Develop/ruby/lib/iconv

 こんな感じ


・postgreSQL のドライバが入らない?

 Gemfiile に

 gem 'pg'

 と書いて、

 bundle install

 bundle update

 とかやるのに、rails の DB 関連のコマンドをたたくと「pg がないよ」と怒られる(>_<


 Gemfile.lock を見ると

 pg (0.16.0-x86-mingw32)

 とあり、32bit 版が入ってるような雰囲気


 https://bitbucket.org/ged/ruby-pg/issue/169

 をみると、bundler のバグだ、とあいてあるような、、

 Gemfile.lock ファイルに

  PLATFORMS

   ruby

   x64-mingw32

   x86-mingw32

 こう書いて、Genfile に

 gem "pg", "~> 0.16.0"

 とかく。

 参考:http://rubygems.org/gems/pg/versions/0.16.0-x64-mingw32

 すると、うごいた。


 途中、メモってないコマンドも何かたたいたので、これだけでは動かないかもしれない、、、


・Guard が動かない

 tutorial の 3.6.2 に書いてあった

 bundle exec guard init rspec

 とやると、「pry がないよ」と怒られる。

 これも、Gemfile.lock をみると

 pry (0.9.12.2-x86-mingw32)

 と書かれていて、どうも、32bit 版が入っているみたい、、、




 もう、この辺で力尽きた、、、

 Ruby 32bit 版でやったほうが、まだ先に進む気がしてきた、




 とりあえず ruby の 64bit 版で環境周り作るのはもうやめ。

 

Windows7でseasar.netの開発を行うと、なぜかしらSystem.EnterpriseServices.RegistrationExceptionがでる

$
0
0

久々にWindowsアプリ開発案件が来たので、開発環境としては

 ・VS2010 C#
 ・seasar .net
 ・DBFlute

でやってみようと試す。


.NET Frameworkは4です。
初めてです。たのしみ。


seasar .netのバージョンは、1.3.18
なんと、最近バージョンアップしてましたね(^^


ここ(http://s2container.net.seasar.org/ja/download.html)にある
seasar用のサンプルを落として、実行してみると、なんかエラーが、、、

DEBUG 2010-08-10 13:41:14,539 [9] エラー:このタスクを実行するには、管理者資格情報が必要です。システム管理者にお問い合わせください。
System.EnterpriseServices.RegistrationException: このタスクを実行するには、管理者資格情報が必要です。システム管理者にお問い合わせください。 ---> System.EnterpriseServices.RegistrationException: アセンブリ'Seasar, Version=1.3.9.0, Culture=neutral, PublicKeyToken=1d0d0c484d50ca62'を登録できませんでした。 ---> System.UnauthorizedAccessException: レジストリキー 'HKEY_CLASSES_ROOT\Seasar.Extension.ADO.Types.BinaryType'へのアクセスが拒否されました。


ってなんでー。


Quillのサンプルを落として試すと、今度は

DEBUG 2010-08-10 13:58:50,939 [8] エラー:あいまいな一致が見つかりました。
System.Reflection.AmbiguousMatchException: あいまいな一致が見つかりました。


だってさ。


google先生に聞いてみると、
[seasar-dotnet:717] Re: S2がWindows Server上で初期化できない (System.EnterpriseServices.RegistrationException)
このあたりの内容なのかな?


ということで、詳しくはわからんけども、Seasar.dllをRegSvcs.exeで登録する必要があるみたい。


コマンドプロンプトから以下を実行
(管理者権限で行う必要あり)

c:\>cd \Windows\Microsoft.NET\Framework\v4.0.30319
C:\Windows\Microsoft.NET\Framework\v4.0.30319>RegSvcs.exe \tmp\s2container.net-1.3.18\s2container.net\build\net2.0\Seasar.dll

(ちなみに、RegSvcs.exeは /u オプションを付けると、アンインストールになるらしい)


なんか、警告がいっぱい出た。
けど気にしないで、seasar用のサンプルを動かすと、、、


動いた(^^


ちなみに、コマンドプロンプトからRegSvcs.exeを使ってseasar.dllを登録しなくても
VS2010を管理者権限で実行すれば、うまく動くようでした。(最初の一回だけ)



んで、Quillのサンプルも試すのですが、、、


動かない(>_<
エラーメッセージが出る。

[EQLL0037]プロキシオブジェクト(IFormDispatcher)の生成に失敗しました。コンストラクタ内の処理、アクセス修飾子、インターセプターを設定しているメソッドがインターフェースor virtualになっているか、Castle.DynamicProxy.dllがSeasar.Quill.dllと同じ場所にあるか等をご確認下さい。


うむむむ



google先生に聞くと
https://www.seasar.org/issues/browse/CONTAINERNET-138
がヒット。



どうやらQuillは.NET Framework4には、まだ対応しきれていないのかな?


VSから、プロジェクトのプロパティで「対象のフレームワーク」を
「.NET Framework4」→「.NET Framework3.5」に変更してあげると、
Quillのサンプルも動きました。



ここまで来るのに、1日半かかってしまった、、、

Seasar.NETのブランクソリューションをダウンロードして動かすと、System.StackOverflowExceptionが発生する

$
0
0

今回開発用のソリューションを作ろうと、Seasar.NETのブランクソリューションをダウンロード

http://s2container.net.seasar.org/ja/download.html



んで、試しに動かすと、System.StackOverflowExceptionが発生する。


なんでー???
と、ソース見てみると、S2WindowsBlank.Tests プロジェクトにある Example.dicon に

って記述が。


自分で自分のファイル読んじゃいけないよねー


ということで、includeするファイルは、ExampleLogics.dicon に変更して動かす。




、、、うん、起動しました。


ちょっとハマったので、メモメモ。

Windows CE6.0の開発案件が来そうだったり

MySQLをDBfluteで使う

$
0
0

久々にDBFluteを使う。




が、jdbc.batでハマる。


このエラーから進まない

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Failed to execute DBFlute Task 'JDBC'.

[Advice]
Check the exception messages and the stack traces.

[Database Product]
MySQL 5.1.50-community

[JDBC Driver]
MySQL-AB JDBC Driver mysql-connector-java-5.1.13 ( Revision: ${bzr.revision-id} ) for JDBC 3.0
_ * * * * * * * * * */
java.lang.IllegalStateException: java.lang.IllegalStateException: Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Unknown schema is NOT supported to use SQL prefix!

[Unified Schema]
{my_db.$$NoNameSchema$$ as unknown}
_ * * * * * * * * * */
at org.apache.torque.task.TorqueJDBCTransformTask.doExecute(TorqueJDBCTransformTask.java:210)
at org.seasar.dbflute.task.bs.DfAbstractTask.execute(DfAbstractTask.java:91)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:357)
at org.apache.tools.ant.Target.performTasks(Target.java:385)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
at org.apache.tools.ant.Main.runBuild(Main.java:698)
at org.apache.tools.ant.Main.startAnt(Main.java:199)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
Caused by: java.lang.IllegalStateException: Look! Read the message below.
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Unknown schema is NOT supported to use SQL prefix!

[Unified Schema]
{my_db.$$NoNameSchema$$ as unknown}
_ * * * * * * * * * */
at org.apache.torque.engine.database.model.UnifiedSchema.throwUnknownSchemaCannotUseSQLPrefixException(UnifiedSchema.java:219)
at org.apache.torque.engine.database.model.UnifiedSchema.getSqlPrefixSchema(UnifiedSchema.java:208)
at org.apache.torque.engine.database.model.UnifiedSchema.buildSqlName(UnifiedSchema.java:238)
at org.seasar.dbflute.logic.jdbc.metadata.info.DfTableMetaInfo.buildTableSqlName(DfTableMetaInfo.java:83)
at org.seasar.dbflute.logic.jdbc.handler.DfAutoIncrementHandler.isAutoIncrementColumn(DfAutoIncrementHandler.java:45)
at org.apache.torque.task.TorqueJDBCTransformTask.isAutoIncrementColumn(TorqueJDBCTransformTask.java:751)
at org.apache.torque.task.TorqueJDBCTransformTask.processAutoIncrement(TorqueJDBCTransformTask.java:422)
at org.apache.torque.task.TorqueJDBCTransformTask.processTable(TorqueJDBCTransformTask.java:324)
at org.apache.torque.task.TorqueJDBCTransformTask.generateXML(TorqueJDBCTransformTask.java:269)
at org.apache.torque.task.TorqueJDBCTransformTask.doExecute(TorqueJDBCTransformTask.java:188)
... 17 more
2010-09-02 20:25:18,034 [main] INFO (DfDataSourceHandler#destroy():115) - ...closeReally()
2010-09-02 20:25:18,042 [main] INFO (DfAbstractTask#showFinalMessage():196) -

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
[Task End]: 00m00s519ms *Abort

DBFLUTE_CLIENT: {mySystem.Dao}
database = mysql (MySQL 5.1.50-community)
language = csharp
container = seasar
package = mySystem.Dao.dbflute

DBFLUTE_ENVIRONMENT_TYPE: {df:default}
driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/my_db
schema = {my_db.myuser as main}
user = myuser
props = {}
additionalSchema =
dataLoadingType = ut
refreshProject =
_/_/_/_/_/_/_/_/_/_/ {JDBC}

原因は、databaseInfoMap.dfpropのschema設定に、ユーザ名をつけてたこと。

map:{
; driver = com.mysql.jdbc.Driver
; url = jdbc:mysql://localhost:3306/my_db
; schema = myuser
; user = myuser
; password = myuser


ではなく


map:{
; driver = com.mysql.jdbc.Driver
; url = jdbc:mysql://localhost:3306/inspection_db
; schema = myuser
; user = myuser
; password = myuser


が正解のもよう。


schemaとuserは同じもの指定しておけばいいもんだと思ってた(^^;

GoogleAppEngineのBigTableで文字列の前方一致検索を行う

$
0
0

最近GAEを勉強中。


タイトル通り、JDOを使って文字列の前方一致の検索を行おうとしたんだけども、



今一やり方が分からない(^^;



google先生に聞いて、
GAEのデータストアで使えるJDO関数 - うなの日記
ここ見てやっとこさわかりましたわ。


BigTableに入れるオブジェクトがnameって言うフィールドを持っているとして、

String name = "前方一致させる文字列";
query.setFilter("name.matches('" + name + ".*')");


なんか、こんな感じで前方一致が出来ました。



これわかるのに、ものすごい時間かけてしまった、、、、



あと、参考にしたページのソース。
ぜんぜんコンパイルできません。
クラスパスに入れるjarが足りないんだろうけど、
一体何を入れればいいか、さっぱりわからない。



でも、UnitTestするのに必要になりそうなので、
後で調べようとおもう(けど忘れると思う。)


Docomoけーたいのアプリ

さくらインターネットのVPSに申し込んでみた

$
0
0

なんか流行ってる?のかな?

VPS(仮想専用サーバー)|さくらインターネット - 無料お試し実施中



月額980円ならいいかー、って軽い気持ちで開始。



早速マシンを起動したのですが、


ネットに繋がらない(;_;



えー、何もできないじゃん、
なんか設定しないといけないの?


と悩んでましたが、今日再起動したら、さっくりとネットに繋がりました



なんやったんやろか

seasar.netのS2Formで、DataSourceに入れたPONOに値が入らない

$
0
0

seasar.netで、データバインディングしているのに、画面に設定されている値が取れないときに確認すること


・FormのDefaultPropertyプロパティの値
 クラスの頭で [ControlModifier("txt", "")] をつけているのにデータが取れない場合は、
 これがあやしい。
 普通は Text とはいってる。


・プログラムで直接コントロールのプロパティを操作している
 どうも画面とPONOを自動バインドすると、画面のコントロールの値を変えるには
 PONO経由で変更する必要があるみたい。


   HogePage page = (HogePage)this.DataSource;
   page.control1 = "HogeHoge";
   this.readValues();


 こんな感じ



ハマっちゃったので、忘れないようにメモ―

 

  

seasar.netでIListのDXOを行うと、ヌルポになる

$
0
0

seasar.netのDXOを使ってるときに、チョイハマり。


IListのデータをDXOしたかったのだけど、実行すると以下のようなエラーが

オブジェクト参照がオブジェクト インスタンスに設定されていません。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
   場所 ProxyInterfaceSystemSystemObject_Hoge_DxoIMNameDxo_System_Runtime_SerializationISerializable.callback__ConvertToPageMName(IList`1 )

メソッドの定義は、こんな感じ

IList ConvertToPage(IList list);


これ、戻り値の定義が間違ってましたね。
戻り値にはインターフェース使えませんね。



というわけで、

List ConvertToPage(IList list);

と、頭のIを取って対応

Windows版のXAMPPをoracleが入ってるPCに入れると、apacheが起動しない

$
0
0

Perlのアドオンを入れたんだけど、
なんかOracleで行われたPerlの設定が、邪魔をしているみたい


apacheのログには

Can't load Perl file: C:/xampp/apache/conf/extra/startup.pl for server localhost:80, exiting...

って出てる。



とりあえず直すには

C:/xampp/apache/conf/extra/perl.confに「PerlSwitches -T」と言うのを追加するといいらしい
設定ファイルは、こんな感じになる

LoadFile "C:/xampp/perl/bin/perl510.dll"
LoadModule perl_module modules/mod_perl.so
PerlSwitches -T 
PerlPostConfigRequire "C:/xampp/apache/conf/extra/startup.pl"

教えていただいた、会社の先輩に感謝

Viewing all 40 articles
Browse latest View live