-- ytakagi
今のJRubyだと、できないみたいです。-Kが効いてませんね。
とりあえずチケット化しました。
https://jira.codehaus.org/browse/JRUBY-6487
> そもそも、なんでutf-8 がデフォでなくて、US-ASCII がデフォなんでしょう?
> そこがそもそも分かりません。面倒なだけに思えます。
この辺の仕様は以下で説明されているので、参考になると思います。
http://jp.rubyist.net/magazine/?0025-Ruby19_m17n#l18
以上です。
実はこの問題、もっと根深い問題かもしれません。
jruby on rails 3.1.1 上での動作確認中に、どうにも納得いかないことから、
お尋ねしたのです。
というのは、
RailsによるアジャイルWebアプリケーション開発 第4版(オーム社)のサンプルが
jruby 1.8 モードなら苦もなく動作するのに、1.9 モードだと動作しないため、
私はその動作しない原因を この encoding 問題ではないかと疑っているのです。
(本当にそれが原因かどうかは、掴みきれていません。database は mysql を使用)
1.9 モードでの不具合の状況は長くなるので省きますが、
今のところ、1.8 モード と 1.9 モードの違いで問題になりそうなのは、
database.yml しかないのではないか? と思いあたったところです。
ここに書き込んだ mysql のパスワードが問題かもしれない。
パスワードの生成は keypass を使いました。ここで 数字・英字そして下線を
keyword の要素と
指定しましたが、この下線が US-ASCII の範囲からはみ出しているかな、とよう
やく気づいた
ところです。
この何日間もの苦闘はなんだったのかな? といいましょうかwww
でも、本当にそれが原因かはまだ分かりません。
とにかく、いろいろありがとうございました。では。
--
ytakagi
大丈夫です。「_」はUS-ASCIIです。関係ありません。
とりあえず、「1.9 モードだと動作しない」をもう少し詳しく教えてくれません
か。エラーが出たときのスタックトレース(log/development.log)をどこかに
貼り付けてくれるので構いません。
私が試しているのは、
RailsによるアジャイルWebアプリケーション開発 第4版 の p61 あたりにある
もっともシンプルなアプリケーションのサンプル depot の例です。
jruby 1.6.6 で rails 3.1.1 により試すと、1.8 モードでは問題ないように思
えます。
が、1.9 モードではダメです。どうもよく分かりません。
(なお、node.js は 0.6.8 、また coffee script は 1.2.0 が入ってます)
手順を簡略に書くと、
rails new depot -d mysql
cd depot
rails generate scaffold Product title:string description:text
image_url:string price:decimal
ここで ~/depot/config/database.yml を編集。mysql のパスワードを設定。
また、事前に mysql に database.yml で指定する detabase名 と同名の
database を作成しておく必要あり。
rake db:migrate
rails server
http://localhost:3000/products
のような感じです。これを、1.8 モードと 1.9 モードでやってみました。
以下に、両方の log/development.log を貼ってみます。
なにか分かりますでしょうか? お手数おかけしてすいません。
######### jruby 1.8 モード の場合の log/development.log 。(ブラウザ的に
は、問題なく動作しているように見える)
�[1m�[36m (33.0ms)�[0m �[1mSET SQL_AUTO_IS_NULL=0�[0m
ActiveRecord::JDBCError: Table 'depot_development.schema_migrations'
doesn't exist: SHOW FIELDS FROM `schema_migrations`
�[1m�[35m (137.0ms)�[0m CREATE TABLE `schema_migrations` (`version`
varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
�[1m�[36m (1.0ms)�[0m �[1mSHOW KEYS FROM `schema_migrations`�[0m
�[1m�[35m (258.0ms)�[0m CREATE UNIQUE INDEX `unique_schema_migrations`
ON `schema_migrations` (`version`)
ActiveRecord::JDBCError: Table 'depot_development.schema_info' doesn't
exist: SHOW FIELDS FROM `schema_info`
�[1m�[36m (0.0ms)�[0m �[1mSELECT `schema_migrations`.`version` FROM
`schema_migrations` �[0m
Migrating to CreateProducts (20120224163103)
�[1m�[35m (140.0ms)�[0m CREATE TABLE `products` (`id` int(11) DEFAULT
NULL auto_increment PRIMARY KEY, `title` varchar(255), `description`
text, `image_url` varchar(255), `price` decimal, `created_at` datetime,
`updated_at` datetime) ENGINE=InnoDB DEFAULT CHARSET=utf8
�[1m�[36m (52.0ms)�[0m �[1mINSERT INTO `schema_migrations` (`version`)
VALUES ('20120224163103')�[0m
�[1m�[35m (0.0ms)�[0m SET SQL_AUTO_IS_NULL=0
�[1m�[36m (1.0ms)�[0m �[1mSELECT `schema_migrations`.`version` FROM
`schema_migrations` �[0m
�[1m�[35m (0.0ms)�[0m SHOW KEYS FROM `products`
Started GET "/products" for 0:0:0:0:0:0:0:1 at Sat Feb 25 01:33:35 +0900
2012
�[1m�[36m (3.0ms)�[0m �[1mSET SQL_AUTO_IS_NULL=0�[0m
Processing by ProductsController#index as HTML
�[1m�[35mProduct Load (1.0ms)�[0m SELECT `products`.* FROM `products`
Rendered products/index.html.erb within layouts/application (9.0ms)
Compiled application.css (16ms) (pid 2787)
Compiled products.css (27ms) (pid 2787)
Compiled scaffolds.css (369ms) (pid 2787)
Compiled application.js (17ms) (pid 2787)
Compiled jquery.js (21ms) (pid 2787)
Compiled jquery_ujs.js (1ms) (pid 2787)
Compiled products.js (346ms) (pid 2787)
Completed 200 OK in 1375ms (Views: 1370.0ms | ActiveRecord: 1.0ms)
Started GET "/assets/products.css?body=1" for 0:0:0:0:0:0:0:1 at Sat Feb
25 01:33:38 +0900 2012
Served asset /products.css - 200 OK (10ms)
Started GET "/assets/application.css?body=1" for 0:0:0:0:0:0:0:1 at Sat
Feb 25 01:33:38 +0900 2012
Served asset /application.css - 200 OK (5ms)
Started GET "/assets/scaffolds.css?body=1" for 0:0:0:0:0:0:0:1 at Sat
Feb 25 01:33:38 +0900 2012
Served asset /scaffolds.css - 200 OK (25ms)
Started GET "/assets/jquery.js?body=1" for 0:0:0:0:0:0:0:1 at Sat Feb 25
01:33:38 +0900 2012
Served asset /jquery.js - 200 OK (13ms)
Started GET "/assets/jquery_ujs.js?body=1" for 0:0:0:0:0:0:0:1 at Sat
Feb 25 01:33:38 +0900 2012
Served asset /jquery_ujs.js - 200 OK (20ms)
Started GET "/assets/products.js?body=1" for 0:0:0:0:0:0:0:1 at Sat Feb
25 01:33:38 +0900 2012
Served asset /products.js - 200 OK (6ms)
Started GET "/assets/application.js?body=1" for 0:0:0:0:0:0:0:1 at Sat
Feb 25 01:33:38 +0900 2012
Served asset /application.js - 200 OK (0ms)
######### jruby 1.9 モード の場合の log/development.log 。
(ブラウザの表示としては、
TypeError in Products#index
Showing /home/ytakagi/depot/app/views/layouts/application.html.erb where
line #6 raised:
can't convert Encoding into String
(in /home/ytakagi/depot/app/assets/javascripts/products.js.coffee)
とのエラーが出ています)
�[1m�[36m (36.0ms)�[0m �[1mSET SQL_AUTO_IS_NULL=0�[0m
ActiveRecord::JDBCError: Table 'depot_development.schema_migrations'
doesn't exist: SHOW FIELDS FROM `schema_migrations`
�[1m�[35m (124.0ms)�[0m CREATE TABLE `schema_migrations` (`version`
varchar(255) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8
�[1m�[36m (1.0ms)�[0m �[1mSHOW KEYS FROM `schema_migrations`�[0m
�[1m�[35m (241.0ms)�[0m CREATE UNIQUE INDEX `unique_schema_migrations`
ON `schema_migrations` (`version`)
ActiveRecord::JDBCError: Table 'depot_development.schema_info' doesn't
exist: SHOW FIELDS FROM `schema_info`
�[1m�[36m (1.0ms)�[0m �[1mSELECT `schema_migrations`.`version` FROM
`schema_migrations` �[0m
Migrating to CreateProducts (20120224164027)
�[1m�[35m (130.0ms)�[0m CREATE TABLE `products` (`id` int(11) DEFAULT
NULL auto_increment PRIMARY KEY, `title` varchar(255), `description`
text, `image_url` varchar(255), `price` decimal, `created_at` datetime,
`updated_at` datetime) ENGINE=InnoDB DEFAULT CHARSET=utf8
�[1m�[36m (47.0ms)�[0m �[1mINSERT INTO `schema_migrations` (`version`)
VALUES ('20120224164027')�[0m
�[1m�[35m (1.0ms)�[0m SET SQL_AUTO_IS_NULL=0
�[1m�[36m (0.0ms)�[0m �[1mSELECT `schema_migrations`.`version` FROM
`schema_migrations` �[0m
�[1m�[35m (1.0ms)�[0m SHOW KEYS FROM `products`
Started GET "/products" for 0:0:0:0:0:0:0:1 at 2012-02-25 01:43:27 +0900
�[1m�[36m (6.0ms)�[0m �[1mSET SQL_AUTO_IS_NULL=0�[0m
Processing by ProductsController#index as HTML
�[1m�[35mProduct Load (10.0ms)�[0m SELECT `products`.* FROM `products`
Rendered products/index.html.erb within layouts/application (15.0ms)
Compiled application.css (39ms) (pid 2647)
Compiled products.css (36ms) (pid 2647)
Compiled scaffolds.css (276ms) (pid 2647)
Compiled application.js (30ms) (pid 2647)
Compiled jquery.js (30ms) (pid 2647)
Compiled jquery_ujs.js (2ms) (pid 2647)
Completed 500 Internal Server Error in 970ms
ActionView::Template::Error (can't convert Encoding into String
(in /home/ytakagi/depot/app/assets/javascripts/products.js.coffee)):
3: <head>
4: <title>Depot</title>
5: <%= stylesheet_link_tag "application" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %>
8: </head>
9: <body>
app/views/layouts/application.html.erb:6:in
`_app_views_layouts_application_html_erb___359730182_6358'
app/controllers/products_controller.rb:7:in `index'
Rendered
/usr/local/bin/jruby/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_trace.erb
(21.0ms)
Rendered
/usr/local/bin/jruby/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb
(11.0ms)
Rendered
/usr/local/bin/jruby/lib/ruby/gems/1.8/gems/actionpack-3.1.1/lib/action_dispatch/middleware/templates/rescues/template_error.erb
within rescues/layout (94.0ms)
--
ytakagi
問題の根本は、
database.yml にあるのは間違いないようです。
現状、database.yml は
adapter: mysql
database: depot_development
username: root
password:
のようになっておりますが、少なくとも adapter は
rails new depot -d mysql のコマンドで自動生成したものから、
変更しないといけないですよね。
1.8 モードではとりあえず動いてしますため、なかなか気づきませんでした。
なにをボケているのか。jruby on rails の解説書がないので ruby on rails
の解説書で代用しているため、基本的なことが分かってないようです。
失礼しました。
まだ問題は完全には分かってませんが、もう一度、初歩からやり直します。
ありがとうございました。では。
2012/2/24 ytakagi <yta...@m5.dion.ne.jp>:
> 問題の根本は、
> database.yml にあるのは間違いないようです。
>
> 現状、database.yml は
> adapter: mysql
> database: depot_development
> username: root
> password:
> のようになっておりますが、少なくとも adapter は
> rails new depot -d mysql のコマンドで自動生成したものから、
> 変更しないといけないですよね。
ですね。JRubyの場合、JDBC経由ですから。
http://guides.rubyonrails.org/getting_started.html の
"3.3.5 Configuring a MySQL Database for JRuby Platform"に
サンプルがあります。
> 1.8 モードではとりあえず動いてしますため、なかなか気づきませんでした。
>
> なにをボケているのか。jruby on rails の解説書がないので ruby on rails
> の解説書で代用しているため、基本的なことが分かってないようです。
本がなくてもググれば、たくさん出てきますよ。
> 失礼しました。
> まだ問題は完全には分かってませんが、もう一度、初歩からやり直します。
> ありがとうございました。では。
がんばってください :)
原田
おっしゃるとおりで、database.yml は自動生成されたままではダメで、
development:
adapter: jdbcmysql
のように修正しなければいけなかったわけで、これに気づかないとは
我ながら情けない限りです。
ただ、そのように変更しましても状況は変わらず、
jruby on rails 3.1.1 はいまのところ ruby1.8 モードでは動きますが、
ruby 1.9 モードでは動作させることが出来ていません。
気長に取り組もうかと思っているところです。
ruby 1.9モードへの移行は、jruby 1.7 が登場するまで待った方がいいのかも
しれません…。
--
ytakagi
PCメール・アドレス yta...@m5.dion.ne.jp
まだごく簡単なサンプルしか試しておりませんが、
jruby on rails 3.1.1 が ruby 1.9 モードで動作するようになりました。
以上、ご報告まで。
(2012年02月26日 18:37), ytakagi wrote:
>
> アドバイス、ありがとうございます。
>
> おっしゃるとおりで、database.yml は自動生成されたままではダメで、
>
> development:
> adapter: jdbcmysql
>
> のように修正しなければいけなかったわけで、これに気づかないとは
> 我ながら情けない限りです。
>
> ただ、そのように変更しましても状況は変わらず、
> jruby on rails 3.1.1 はいまのところ ruby1.8 モードでは動きますが、
> ruby 1.9 モードでは動作させることが出来ていません。
>
> 気長に取り組もうかと思っているところです。
> ruby 1.9モードへの移行は、jruby 1.7 が登場するまで待った方がいいのかも
> しれません…。
>
--
ytakagi
PCメール・アドレス yta...@m5.dion.ne.jp