Ruby 初心者スレッド Part 41
■ このスレッドは過去ログ倉庫に格納されています
0001京 ◆SsSSsSsSSs
2011/02/10(木) 13:47:51★注意★ Ruby 1.9.2 は初心者には若干時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。
文字エンコーディング等の外部基礎知識が必要な上、不完全対応の第三者ライブラリでの問題の切り分けが手間です。
迷う点の少ない1.8.7に習熟→おもむろに1.9.2の変更点のみ重点学習、とすればスムーズに移行できるでしょう。
関連スレやURLは>>2-5あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・エラーメッセージの共通そうな部分やエラーの出るモジュール名でググる
・マニュアルで引っかかったクラスの記述を探す http://www.ruby-lang.org/ja/man/
・FAQを一応読む http://www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
・エラーメッセージ(自力で訳さずなるべくそのままで)
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・実行環境(OS名、Rubyのバージョン(ruby -v でわかる))
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって初心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
0508デフォルトの名無しさん
2011/03/20(日) 22:56:44.90誰も得しないだろ
0509デフォルトの名無しさん
2011/03/20(日) 23:05:16.65まさに参照の問題じゃない
同じオブジェクトを指すという
0510デフォルトの名無しさん
2011/03/20(日) 23:17:12.97配列が出てこない str.gsub(/re/, '\1') とかにしたほうがよかったか
>>505は具体的な配列の動作の話してるわけじゃないぞ
0511デフォルトの名無しさん
2011/03/20(日) 23:23:46.56誰に言ってるかわからないからアンカつけれ
0512デフォルトの名無しさん
2011/03/21(月) 11:48:09.04IDEはIDEに慣れた人が使う開発環境だよ
特にRubyのようにIDEの利用者が少ないなら、JavaやC#のようにサクサク使えないのを分かった上でIDEに慣れた人が使うものだと思うよ
もしWindowsでC#やVB.netをvimやemacsで開発する人がいたらちと酔狂だなとは思うかもしれないが、慣れている環境というのを差し引くのは難しいよ
俺の結論も>>475なんだが>>474が初心者なら特に多くの人が使っていない開発環境を積極的に使う理由がないな
趣味でちょっとしたスクリプトを書くのなら何でもいいんだがな
0513デフォルトの名無しさん
2011/03/22(火) 09:34:14.490514デフォルトの名無しさん
2011/03/22(火) 10:47:09.45コード補完+ステップ実行+変数ウォッチできるだけでも開発効率が段違い。
ruby.exe+テキストエディタな環境と排他でもなんでもないから
IDEでパーツ作って残りは従来環境で仕上げてテストする事も普通にできる。
2011年にもなってIDEは是か非かなんてあまりにも不毛すぎるよ。
0515デフォルトの名無しさん
2011/03/22(火) 11:22:11.430516デフォルトの名無しさん
2011/03/22(火) 14:45:58.74そういった者に向く入門書はないでしょうか
調べてみると「Ruby1はじめてのプログラミング」が良いらしいですがこちらは如何でしょう
0517デフォルトの名無しさん
2011/03/22(火) 15:53:07.01くっそー誰だそんなやたらピンポイントに的確なレビューしてる奴は
ttp://www.amazon.co.jp/product-reviews/4797357401/
提供する問題が若干独り善がりであるという指摘は前からうっすらあった
書き換えたの送ったら更新してくれるかなあ
Ruby1ってあれだよねピンクのガゼルの大きいやつ
ttp://www.amazon.co.jp/dp/4798117994/
Rubyの初心者向け薄い本は当人の当たり外れが大き過ぎるので
できれば事前に立ち読みとかしてマッチングしてもらえるとまいっちんぐなことにならないんだが
内容としては普通に初心者向けだと思う
…つまり、下手したら本の半分くらいが自分にとって不要な記述である可能性があるってことだけど
たのしいRubyより前に位置する本であることは保証するよ
1.9に関する記述がなかった気がするが、まあそれは必要になってから上乗せで勉強すればええ
0518デフォルトの名無しさん
2011/03/22(火) 17:40:21.14http://www.amazon.co.jp/dp/4873112923 これか
http://www.amazon.co.jp/dp/4798019437 これ
0519デフォルトの名無しさん
2011/03/23(水) 11:33:45.48ttp://i.yimg.jp/images/weather/general/forcast/clouds_sun_st.gif
この画像をローカルにキャッシュしたいのですが、ディレクトリをどこに置いていいのかわかりません
Otenki::Config とかクラスを作って、ユーザが事前に指定しない場合は動作しない、みたいなのがいいんでしょうか
Otenki::Config.cache_dir = "/home/ch2/otenki/cache" # 必須
Otenki.new.show
インストール先に勝手に gems/otenkiview-0.1.2/cache/ を作ってそこに一律保存する、みたいなのってよくないですよね?
0520デフォルトの名無しさん
2011/03/23(水) 12:11:05.93うーん、現在の天気を調べるクラスは別にいいんだけど
画像までライブラリに含むのはどうかと思うなあ
ライブラリ使う人が違う画像を使いたいと思ったらどうするの?
0521デフォルトの名無しさん
2011/03/23(水) 12:18:48.81gems/libname-1.0.0/ のライブラリホームにスクリプトが書き込むのはよろしくないな
パーミッションの関係で書き込めないことが多いし、スーパーユーザーで書き込んだら上書きできない
永続的な設定ファイルとかをどうしようかというのはみんな悩んでるんだけどね
0522デフォルトの名無しさん
2011/03/23(水) 12:26:35.20いつのまにか $HOME/.otenki/cache/ みたいなのを作る糞ライブラリもあるけどな
0523デフォルトの名無しさん
2011/03/23(水) 20:18:16.60という話ではないのか。
↑なら post_install フックでやりゃいいんだけど。
0524デフォルトの名無しさん
2011/03/23(水) 20:33:35.92doc = Nokogiri.parse(open(天気予報サイト).read)
yohou_text = doc.at('今日の天気文字列').inner_text
mark_src = doc.at('img/今日の天気マーク')['src']
local_cache = @cache_dir + File.basename(mark_src)
File.open(local_cache, 'w'){|f| f.print(open(mark_src).read)} unless File.exist?(local_cache)
puts <<EOS
<title>今日のお天気</title>
<img src="file://#{local_cache}">
今日の天気は#{yohou_text}です!
EOS
とかやるんじゃないの
で、@cache_dir の初期値をどうしましょうと
ライブラリが共通で使うなら gem インストール時になんか適当に自動で GET すればいいじゃんね
0525デフォルトの名無しさん
2011/03/24(木) 01:10:55.51Linux使ったことないから、こういう目的にshareを使って良いものなのかどうかわからないけど
0526デフォルトの名無しさん
2011/03/24(木) 01:33:01.49ただ、ふと考えてみたら、他のユーザーが使った後にはシステムデフォルトの画像が変わってるかもしれないって、
結構、嫌な仕様じゃね?
0527デフォルトの名無しさん
2011/03/24(木) 05:14:06.81まあ、そういうような共用読み書きディレクトリの指定方法がないのも確かなんだが
Webのキャッシュって言ったら普通はログインユーザーごとに個別だろ、普通は
意外とこのへんの基本設定のデファクトって固まってないのね
0528デフォルトの名無しさん
2011/03/24(木) 05:28:34.06指定されてなかったらデフォルト使うのではなくエラーで止める
ユーザーが指定しなくても適当にクラスをnewしてgetするだけで
適当にホームにディレクトリ掘って永続保存してあら便利、みたいなのはキモいのでやめるべき
0529デフォルトの名無しさん
2011/03/24(木) 09:37:28.58そもそもこれはキャッシュなのか
0530デフォルトの名無しさん
2011/03/24(木) 09:43:17.91てかそこを突っ込んでどうする
0531デフォルトの名無しさん
2011/03/24(木) 09:50:57.66ライブラリ動作用のユーザーディレクトリ位置なんてうまい固定回答がない分野なので、
初心者スレとしてはもうそこらへん突っ込むしかないのよ
知りませんってレスするわけにはいかないだろプライドとしてw
0532デフォルトの名無しさん
2011/03/24(木) 12:09:49.67ホームディレクトリに勝手に設定ファイル作るソフト排除してたら何も出来ないよ
俺はユーザの指定が無いならホームに勝手に作っていいと思う派
0533デフォルトの名無しさん
2011/03/24(木) 12:37:45.18プログラミングが可能な程度のPCリテラシ持ちだとみなしてよいでそ
ほとんど存在しないものに対してコストをかけるこことほど間抜けなものもない
0534デフォルトの名無しさん
2011/03/24(木) 13:35:56.84セキュリティ考えろよカス、ユーザに確認とれメンテ苦労するわ
0535デフォルトの名無しさん
2011/03/24(木) 18:55:38.82Ruby始めて4年くらいなのだがなんか絶望した
0536デフォルトの名無しさん
2011/03/24(木) 21:02:35.450537デフォルトの名無しさん
2011/03/24(木) 21:19:58.84無軌道に書いて半日とかはさすがになんかちょっとアレだが
0538デフォルトの名無しさん
2011/03/24(木) 21:23:42.74セキュリティって何ですか?おいしいの?
>>519のプログラムがセキュリティを確保するにはどうしたらいいの?
0539デフォルトの名無しさん
2011/03/24(木) 21:37:41.15悲惨だよね。
0540デフォルトの名無しさん
2011/03/24(木) 22:47:39.98expected ってリテラルのような実際の値で書くべきだよね?
def arr_change(arr)
arrを標準メソッドでアレしてコレした配列
end
に対して
expected = arrを標準メソッドでアレしてコレした配列
arr_change(arr).should eql(expected)
というテスト書いても実際的な意味はないですよね
expected = [741, 332, 93, (中略), 23140, 9847, 30994, 4, 43098]
arr_change(arr).should eql(expected)
と、若干長いリテラルになったとしても書くべきですよね
0541デフォルトの名無しさん
2011/03/24(木) 23:02:24.27セキュリティしらないの?
0542デフォルトの名無しさん
2011/03/25(金) 00:21:37.34知らないな
アプリケーションがホームにディレクトリ掘ったりファイル作ったりするだけで
破綻してしまうようなセキュリティてどんなん
もちろんそのアプリケーションが悪意を持って作られたってんなら話は別だが
>>534
一応言っておくと俺は>>532で「ユーザの指定が無いなら」と前置きしてるんだから
ユーザに確認しなくてもセキュリティが確保できる方法を示してくれよ
人の事をカス呼ばわりするんだからそれくらい出来るだろう?
0543デフォルトの名無しさん
2011/03/25(金) 00:30:02.920544デフォルトの名無しさん
2011/03/25(金) 00:47:27.545年後に自分の文章を読んでみろ、カスと呼ばれた意味がわかる
俺は教えない
0545デフォルトの名無しさん
2011/03/25(金) 01:03:44.47知らない事は教えられんわな
せっかくだから俺が>>519のプログラムを作るならこのようにするってのを書いとく
(gemはOSのパッケージシステム使ってて意識した事無いんで考慮してない)
ライブラリの提供する機能は指定場所日時の天気をSymbolやStringで返すだけ。
問題の画像ファイルはそのライブラリを使用するアプリケーションが用意する。
利用者に同じ画像ファイルを使わせるために配布物の中にあらかじめ納めておく。
用意できず他所から持ってくるならインストール時にユーザに確認を取ってからやるか
手動でダウンロードさせる。
各ユーザの設定ファイルでファイルの場所を指定するのも良いだろう。
どっちにしてもキャッシュやセキュリティ等の問題は発生しない。
0546デフォルトの名無しさん
2011/03/25(金) 01:07:55.13この場合はかなり大きなウェイト占めてると思うんだが
0547デフォルトの名無しさん
2011/03/25(金) 01:14:24.041.ネットワーク上のリソースだろうが、ローカルなリソースだろうか同一メソッドで統一したアクセスを可能にする
2.ローカルリソースはライブラリじゃなくて、アプリ側に準備して貰う(サンプルをドキュメントに添付すれば一応標準リソース)
3.ネットワーク上のリソースアクセスに関しては、トラフィックを減らしたいならプロキシでなんとかして貰う(アプリがローカルに落としても良いが…)
まぁ、全部ライブラリで面倒見ようとするからメンドクサイので有って、可変部分ならアプリ側に任せるのが筋じゃね?
0548Perl忍者 ◆M5ZWRnXOj6
2011/03/25(金) 10:22:27.52# あっ、このまま起き続けて死ぬ死んでる 1分未満前 TweetIrcGatewayから
Load Averageがこの時間帯に1くらいまで上昇してた 8分前
DoS食らってる 31分前 TweetIrcGatewayから
0549デフォルトの名無しさん
2011/03/25(金) 10:35:37.35ライブラリのあるディレクトリにユーザーが書き込みできない可能性が高いからね…
ユーザーが持つべきデータのディレクトリは
ユーザーが明示的に指定するまで使わない/動かないのがいちばんいいような気がする
一般GUIアプリケーションならホームに適当にディレクトリ掘っても許されそうだけど、ライブラリじゃねえ
0550デフォルトの名無しさん
2011/03/25(金) 10:36:20.770551デフォルトの名無しさん
2011/03/25(金) 14:14:22.53File.readlines(filename)
IO.readlines(filename)
File.open(filename).readlines
このようなreadlinesでファイルをよむと得られた配列の要素に改行が含まれるのですがこの動作は想定されたものなのでしょうか?
配列の要素に改行が欲しくないのでつい
File.read(filename).split("\n")
としていてこれはこれでわかりやすいのですが釈然としません
readlinesは本来はどのような時つかうものなのでしょうか?
ruby 1.9.2-p180です
0552デフォルトの名無しさん
2011/03/25(金) 14:49:21.63行改の直後から行改の直後までが「行」だ
ただ、この正確な動作はあまり直感的ではなく文句がつきまくったので
String#lines という改行抜きで配列にするメソッドが 1.9 と 1.8.7 についた
0553デフォルトの名無しさん
2011/03/25(金) 15:11:35.160554デフォルトの名無しさん
2011/03/25(金) 15:41:59.47# String#lines で Enumerator が返る。
File.read('/etc/passwd').lines.class
=> Enumerable::Enumerator
# Enumerator なのでそのままいろいろ出来る。
File.read('/etc/passwd').lines.grep(/root/).first
=> "root:*:0:0:System Administrator:/var/root:/bin/sah\n"
# 配列でないと出来ないことをやりたい場合は to_a すべし。
irb(main):003:0> File.read('/etc/passwd').lines.shuffle
NoMethodError: undefined method `shuffle'
irb(main):004:0> File.read('/etc/passwd').lines.to_a.shuffle
=> (略)
尚、各行は改行そのまま。不要なら map(&:chomp) する。
0555デフォルトの名無しさん
2011/03/25(金) 18:44:23.72俺の1.9.2には付いてないみたいだ
0556デフォルトの名無しさん
2011/03/26(土) 22:23:11.97そういうものなのですね
chompするなりすることにします
0557デフォルトの名無しさん
2011/03/27(日) 10:30:33.330558デフォルトの名無しさん
2011/03/27(日) 10:37:04.690559デフォルトの名無しさん
2011/03/27(日) 11:24:54.320560デフォルトの名無しさん
2011/03/27(日) 11:42:30.35常に最新版が提供されてていいですね
公式サイトで紹介されてる国内の配布サイトのは古いのばっかりでやる気を感じられない
0561デフォルトの名無しさん
2011/03/27(日) 11:57:29.59めんどくさいなあ
0562デフォルトの名無しさん
2011/03/27(日) 12:09:32.530563デフォルトの名無しさん
2011/03/27(日) 12:22:56.920564デフォルトの名無しさん
2011/03/28(月) 21:25:58.93何の最新版かしらんが
rubyフォージよりも最新版を見たければrubygems.orgやgithub見ておけばいいんでないの
0565デフォルトの名無しさん
2011/03/28(月) 22:05:35.57単にRAAが打ち捨てられただけなのでは?
0566デフォルトの名無しさん
2011/03/29(火) 17:31:27.83RubyをEmacsで使おうとして苦戦しております。
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=Emacs
このサイトにて、
「Debianの"ruby-elisp.deb"のようにパッケージが利用できるなら、
それをインストールする。ソースからビルドした場合などは、
適当な場所(たとえば~/site-lispなど)にmisc/*.elをコピーする。
そして~/.emacsに次のように書いておく」
と書いてあります。
最後の部分は恐らくパスを追加するということなのだと思うのですが、
私はパスを追加するとはコントロールパネルから辿って行って、絶対パスを
ペーストするやり方しか知らないので、ここがよくわかりません。
~/.emacsって言うのはどこを指していて、どうやって書き込めばいいのでしょうか?
0567デフォルトの名無しさん
2011/03/29(火) 17:36:41.38EmacsやるまえにLinux入門みたいなの一冊買ったほうがいいよ
0568デフォルトの名無しさん
2011/03/29(火) 17:37:44.10Emacsの知識がないならRubyに慣れるまではとりあえずふつうのエディタ使え
0569デフォルトの名無しさん
2011/03/29(火) 17:39:27.26ababaさんがログインしたらだいたい、
/home/ababa
それか
env | grep HOME=
としてみてもわかる。
そこに、,emacsっていう名前のファイルがあればそれを編集。
0570デフォルトの名無しさん
2011/03/29(火) 18:43:25.240571デフォルトの名無しさん
2011/03/29(火) 18:49:11.05Windows版Emacs(というかXEmacs)にはイヤな思い出しかないんだが
とりあえず、そのサイトはWindowsを対象にしてないのは確かだ
0572566
2011/03/29(火) 19:33:14.48なんとかやってみます。
0573566
2011/03/29(火) 19:34:06.79使いにくいのでcygwin使ってるんですが、ちょっと仕様が違ったりするんですかね??
0574デフォルトの名無しさん
2011/03/29(火) 20:18:34.290575デフォルトの名無しさん
2011/03/29(火) 20:49:46.05仕様っつーか、ちょっとしたトラブルとかのときに
Cygwinの問題なのかWindowsの問題なのかソフトの問題なのかよーわからんことになる。
0576566
2011/03/29(火) 20:54:38.03(´・ω・`)え。。
(´・ω・,';,';,',
(´・ω,';,';,',
(´・ω・,';,';,',
(`・ω・´)仕方ないのでこのままがんばってみます!
meadowってやつで頑張ってみます!ありがとうございました!
0577デフォルトの名無しさん
2011/03/30(水) 00:04:56.490578デフォルトの名無しさん
2011/03/30(水) 01:20:36.88導入時に多少てこずったとしても。
0579デフォルトの名無しさん
2011/03/30(水) 10:30:04.55Windowsを利用してます
Apache2.2も入れてます
主に日々の作業を自動化する目的で利用するのとCGIの勉強用途に利用します
http://rubyinstaller.org/downloads/からRuby 1.8.7-p334をダウンロードしてインストールしました
gem update --systemでgemは1.6.2にアップデートできました
ほかに何かインストールや設定するものはございますでしょうか?
RedmineとRuby on railsも入れてみたいなと思うのですが
ApacheのドキュメントルートがC:\www\docroot\で
ユーザーディレクトリがC:\user\*\public_htmlとなっております(*の部分は適当に付けたユーザー名が入ります)
gemでインストールする場合はユーザーディレクトリに入れて動かしたいのですがディレクトリの指定は可能でしょうか?
0580デフォルトの名無しさん
2011/03/30(水) 11:00:35.17RailsとCGIはあんまり相容れないから
Railsのお話はこちら
ttp://hibari.2ch.net/test/read.cgi/php/1292032736/
Apache さんが使う gem は Apache さん用にインストールするか
gem をシステムワイドにインストールして Apache さんに使わせるかだと思う
gem はユーザーのホームに .gemrc があればそれを読むので
そこに gem: "--user-install" とでも書いとけ
0581デフォルトの名無しさん
2011/03/30(水) 11:14:10.38昔からprintとpってありました?
put、print、pの違いが分かりません
0582デフォルトの名無しさん
2011/03/30(水) 11:18:04.34この-Ksをファイルの中に書いてruby test.rbで呼ぶ方法を教えてください
0583デフォルトの名無しさん
2011/03/30(水) 11:35:03.01ありがとうございます
0584デフォルトの名無しさん
2011/03/30(水) 12:34:04.19>>11
>>582
スクリプトの1行目に適当に
#!ruby -Ks
と書いておくというのはどう
あらゆる環境で動作するかどうかは保証できないけど
$KCODE を使う場合は
$KCODE = "s"
load "./test.rb"
と書いた main.rb を ruby main.rb で呼ぶとかそういう小細工が必要
0585デフォルトの名無しさん
2011/03/30(水) 12:37:52.82ruby -Ks -x "%~0"
goto :eof
#!ruby
0586デフォルトの名無しさん
2011/03/30(水) 12:41:40.87print rand(3)+1, "\n"
end
どうもRubyの乱数生成は偏りがある感じがあるのですが
良い乱数生成方法はございますか?
0587デフォルトの名無しさん
2011/03/30(水) 12:55:20.16その結果を見てわかるようなレベルの偏りは存在しない
0588デフォルトの名無しさん
2011/03/30(水) 13:06:41.71Rubyの乱数はMTだからそんなに粗悪な値は出ないはずだけど
常に偏らない値が欲しいならこんなんにするしかない
乱数生成とは又違う話だけど
[1,1,1,2,2,2,3,3,3,rand(3)+1].shuffle
0589デフォルトの名無しさん
2011/03/30(水) 13:18:07.661から6までの乱数を返すルーチンで1が3回返ったら怒る人は稀にいる
乱数による各々の出目は平均的でなければならないんだってさ
0590デフォルトの名無しさん
2011/03/30(水) 13:25:18.42サイコロ振りまくったら、出目ごとの出た回数が平均的になっていくなんて。
0591デフォルトの名無しさん
2011/03/30(水) 13:37:28.980592デフォルトの名無しさん
2011/03/30(水) 14:20:03.56偏って同じ目が出るという事象も
平均して出るという事象も
ぜんぜん出ないという事象も
生じる。
0593デフォルトの名無しさん
2011/03/30(水) 18:07:33.88以下のようなフォームでメールアドレスを入力し「次へ進む」を押すと、
登録完了メールがユーザに届くプログラムを作成中です。
<form method='post' action='test.rb'>
<input type='text' name='email'>
<input type='submit' value='次へ進む'>
</form>
メールを送る機能は既に完成し、メールの送信自体は行えているのですが
上記のフォームを実際に使用してみると Internal Server Error と表示されてしまいます。
また、エラーが発生するにも関わらずメールは意図したとおりのアドレスに送信されます。
作成して利用しているスクリプトの概要は以下のとおりです。
mail = TMail::Mail.new
mail.to = '[email protected]'
mail.from = '[email protected]'
mail.subject = '登録完了'.tojis
mail.date = Time.now
mail.mime_version = '1.0'
mail.set_content_type 'text', 'plain', {'charset'=>'iso-2022-jp'}
mail.body = ('登録完了いたしました').tojis
Net::SMTP.start(host, port, "localhost.localdomain", user, pass, "login"){|smtp|
smtp.sendmail(mail.encoded, mail.from, mail.to)
}
何が原因なのでしょうか?なにかおわかりになる方がいらっしゃれば、助言お願い致します。
0594デフォルトの名無しさん
2011/03/30(水) 18:16:37.50俺昔どうやってたかな?と調べたら以下のようにやってた。
kconv使うかどうかはさておき、他のパラメータの与え方はこんなもん。
これで十分?
mailbody = Kconv.tojis(mailbody)
Net::SMTP.start(smtphost, smtpport) {|smtp|
src = <<EndOfMail
From: #{mailfromaddr}
To: #{mailtoaddr}
Subject: #{subject}
Content-Transfer-Encoding: 7bit
Content-Type: Text/Plain; charset=iso-2022-jp
#{mailbody}
EndOfMail
smtp.send_mail src, mailfromaddr, mailtoaddr
}
0595Perl忍者 ◆M5ZWRnXOj6
2011/03/30(水) 18:18:56.420596デフォルトの名無しさん
2011/03/30(水) 18:24:59.21HTTPレスポンスとしてはどういうものを返しているの?
ちゃんと200が返るようになってるの?
0597デフォルトの名無しさん
2011/03/30(水) 18:34:44.13確か自分も以前そのやり方でやろうとしていたんですが、
そのやり方でのユーザ名とパスワードの設定方法が
わかんなくて今のやり方に行き着いたような気がします。
でも、他のやり方を探してみるのはありですね。
ちょっとやってみます。ありがとうございます。
>>596
ありがとうございます。
正しいやり方なのかどうかはわからないのですが、
先ほどのスクリプトの末尾に
print "Content-Type: text/html\n\n"
print "OK"
のようにやってみたりはしました。
我流?というか常識的なところを理解してません、
正しいやり方を教えていただけるとありがたいです。
0598デフォルトの名無しさん
2011/03/30(水) 19:26:05.15>上記のフォームを実際に使用してみると Internal Server Error と表示されてしまいます。
うん、
……ってそれで終わりかよ!
Internal Server Error ってことは Apache のログにエラーの出力があるだろそれ読めよ!
0599デフォルトの名無しさん
2011/03/30(水) 19:40:55.23「ローカルで問題なく動作するスクリプトをサーバに設置するとなぜか動作しません」
なわけで、そりゃサーバ側の環境が悪いんじゃないん、というお話に
HTTP サーバのエラーログあたりに原因究明の鍵というかそのまま答が表示されてるはずなんだけど
たぶんそれを読む権限がなく、HTTP サーバがどうやって Ruby を実行してるか調べることもできないと推測
おまけにそれの原因は >>593 に書いたスクリプト以外の部分にあると
$SAFE=1 と先頭に書いた上でローカルでスクリプト実行してたらなにか warning が出るかも
CGI がファイル作成できるのなら、$stderr を捻じ曲げてファイル出力にしてサーバ実行するとなにか書いてあるかも
$stderr = File.open('error.txt') と先頭に書いて error.txt を実行後に読んでみるとか
0600デフォルトの名無しさん
2011/03/30(水) 19:43:24.33○ $stderr = File.open('error.txt', 'w')
0601デフォルトの名無しさん
2011/03/30(水) 20:08:26.76消えろカス
0602デフォルトの名無しさん
2011/03/30(水) 20:13:13.99今のところレスしたのお前だけだぞ
0603デフォルトの名無しさん
2011/03/31(木) 09:58:02.54ありがとうございます!
ご教授いただいたとおりにやってみましたので報告致します。
まずは Apache のエラーログを見てみました。
が、以下のように表示されているだけでした。
Premature end of script headers:test.rb, referer: http://foo/bar.html
とりあえずここに有益な情報はないと判断しました。
つぎに「HTTP サーバがどうやって Ruby を実行してるか調べることもできない」という部分ですが、
具体的に何をどうすればよいのかがわからなかったので保留させていただきました。
つぎに「先頭に」$SAFE=1 と $stderr = File.open('error.txt', 'w') を書き足した上で、
ローカルでスクリプトを実行してみました。
この「先頭に」の位置ですが、
#!/Ruby/bin/ruby.exe
# -*- coding: utf-8 -*-.
(ここ)
require "rubygems"
require "cgi"
require "tmail"
require "net/smtp"
と判断しました。
0604デフォルトの名無しさん
2011/03/31(木) 10:03:35.76C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/defaults.rb:43:in `exist?': Insecure operation - exist? (SecurityError)
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/defaults.rb:43:in `default_path'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems.rb:726:in `path'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:57:in `installed_spec_directories'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/source_index.rb:47:in `from_installed_gems'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems.rb:1025:in `source_index'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/gem_path_searcher.rb:135:in `init_gemspecs'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/gem_path_searcher.rb:14:in `initialize'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems.rb:984:in `new'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems.rb:984:in `searcher'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems.rb:206:in `try_activate'
from C:/Ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:57:in `require'
from test.rb:9
ちなみに require 以下に $SAFE=1 と $stderr = File.open('error.txt', 'w') を書き足した場合は
特にエラーは出力されませんでした。
0605デフォルトの名無しさん
2011/03/31(木) 10:26:10.68ローカルで$SAFEを上げて実行してセキュリティエラーが出るのはそりゃ当たり前
というか、もしかして>>596の言うように HTTP としてのレスポンスが何もないだけなんじゃ…
CGI なんだから、リクエストに対して返すレスポンスのステータスが空文字列だとまずい
適当な「メール送信しましたありがとうございます」なHTMLを返すとかにしておけ
0606デフォルトの名無しさん
2011/03/31(木) 10:31:16.380607デフォルトの名無しさん
2011/03/31(木) 10:37:20.29「○○さんありがとう! トップに戻る」というカスタムなHTMLを返したいなら200
ブラウザ真っ白の空っぽのボディでいいなら201か202
静的な「ご利用ありがとうございました.html」に飛ばすだけなら302
■ このスレッドは過去ログ倉庫に格納されています