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 版で環境周り作るのはもうやめ。
rails で foreign key はどやる
ちょっとギブアップぎみ
メモとして残す
ためになったのは以下のサイト
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」を使うことで、関連をていぎできるみたい。
これはこれで便利そう。
DB の スキーマー定義から schema.rb を作る
前の記事は、いまいち君。
http://stackoverflow.com/questions/1428499/ruby-rails-reverse-migration-ddl-to-ruby-code
にあるように、DDL で DB にテーブル作ってから、
rake db:schema:dump
とやる方が簡単な感じ。
http://www20.atwiki.jp/katow30it/pages/12.html
↑ここにも、既存の DB から始める方法が書いてありますね
突然の Rails
突然の 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 初めてだから超適当。すごい適当。
とりあえず 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 にいちいち手で制約とか書いていかないといけないのか、、、、
うーん。いまいち。
Google翻訳API の制限文字数
追記:2011/03/02
まちがい。5000文字が正解の模様。
ドキュメントに書いてあった
http://code.google.com/intl/ja/apis/language/translate/v2/using_rest.html
The q parameter in the POST body must be less than 5K characters.
-
-
- -
-
たぶん。
redmine_importer で 親チケット情報も登録する
redmine_importeでCSVデータの一括登録出来たよ(^^
とおもってたら、どうも親チケットの登録が出来ないみたい、、、
親チケットは最近の機能だから仕方がないのかな。
でも、どうしても親チケットの登録がしたかったので、pluginの修正を行ってみました
編集ファイルは
/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
これで新規登録のチケットは、親チケットの情報が登録されるようになりました。
が、既存チケットの更新の際はエラーになります。
まぁ、更新は今のところ使わないので、とりあえずこれで使ってみます。
RedmineでチケットをCSVで一括登録する
すんごいハマったので、メモ。
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日間かけて何にも成果出せてなかったので、うまくいってホント良かった(;_;