【RoR】Ruby on Rails Part12
1 :
nobodyさん :
2011/07/19(火) 13:44:46.30 ID:zxrusyvr
3 :
nobodyさん :2011/07/19(火) 15:53:52.93 ID:zxrusyvr
2以降はMySQLじゃなくてSQLiteがデフォルトDB機関になってるけど 設定のとこだけ違ってRORのコーディングは全く同じような書き方をして問題ない? 後々SQLiteからMySQLにマイグレーションするときのために コーディング部分で気をつけておくべきことってあるかな?
アップロードした画像はDBに直接保存。 もしくは画像ファイルを特定のディレクトリに保存してそのURLをDBに保存。 どちらがいいですか? 1日10000PVです。
7 :
nobodyさん :2011/07/20(水) 07:17:32.17 ID:Wbv/MqQN
トレードオフ
8 :
nobodyさん :2011/07/20(水) 13:47:16.29 ID:Wbv/MqQN
9 :
nobodyさん :2011/07/20(水) 16:13:02.07 ID:Wbv/MqQN
>>5 SQLiteの独自の機能に依存した何かをしていなければ問題ない。
>>10 SQLite独自の機能って例えば何がある?
12 :
nobodyさん :2011/07/21(木) 13:09:28.87 ID:/ztmC1CW
13 :
nobodyさん :2011/07/21(木) 13:41:48.70 ID:bT1+m3ud
はじめまして Rails2.3.8 view/hoge/index.html.erbにて DB:hogesのhoge.fooとhoge.barをプルダウンの要素にして、 絞り込むUIを作ろうとしています。 [hoge.foo▼] [hoge.bar▼] 《検索》 <tabale> 〜 </table> 画面を開いたときは、table部は全レコ表示 プルダウンでfooとbarを選択→検索押下で、 foo=value1、bar=value2で絞り込んだレコードだけ表示 プルダウン未選択の場合はすべて表示 解説ページか、サンプルコードを紹介願います 当方、非コーダのシステム部員でレベル低いです
14 :
nobodyさん :2011/07/21(木) 15:23:53.61 ID:/ztmC1CW
15 :
nobodyさん :2011/07/21(木) 15:26:57.85 ID:/ztmC1CW
>>13 多分、簡単すぎてそんなサンプルとか解説は出てこないかも。
>>14-15 はプルダウンの連動とかだし。
17 :
nobodyさん :2011/07/21(木) 21:39:39.56 ID:/ztmC1CW
18 :
13 :2011/07/22(金) 10:44:35.42 ID:WHc+Ckrb
>>16 簡単、、、ですか。ずーーーーーっと
>>14-15 みたりググリながらやってるけど
コンボボックスすら作れません。
やりたいのは、野菜の見積データを卸に入力させてそれを比較表にして見ることです。
卸が入力したいろんな野菜の見積データを、下記で絞り込んで同じ規格の野菜だけ一覧にしてみたいのです。
hinomu(玉ねぎとか大根とか)
kikaku(野菜の大きさ。Lとか2Lとか)
ryoumoku(何コ入り)
つづく
19 :
13 :2011/07/22(金) 10:47:07.07 ID:WHc+Ckrb
承前 まず、品目でコンボボックスを作りたいのですが、普通につくると重複するのでgroup byしたいのですが <%= collection_select( :hinmoku_id, Vegetable.find(:all, :group => "hinmoku") :id, :hinmoku, :include_blank => '品目を選択' )%> で動きません。
20 :
nobodyさん :2011/07/22(金) 10:57:40.61 ID:QEp81h1s
collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {}) 第1引数が足りなくね?
基礎ができてないのにググってもよく分からないと思うよ
22 :
13 :2011/07/22(金) 11:51:18.12 ID:WHc+Ckrb
>>20 <%= collection_select( "hinmoku_id", "hinmoku_p", Vegetable.find(:all, :group => "hinmoku"), :id, :hinmoku, :include_blank => '品目を選択' )%>
あわせたら動きました。有難う御座います。
>>21 そうなんだけど、90%くらいまではあっという間に出来ちゃうから…。
こうやって作りながら覚えていくしか無い。
あとはconditions=>に代入していけばいいのか。
>>22 groupのマスタは無いのか。
あと普通viewでfindしない。
コントローラでfindしてインスタンス変数に入れて、viewで表示。
24 :
nobodyさん :2011/07/22(金) 15:48:08.56 ID:Uhqw0ffO
質問させてください。
Ruby、Railsともに昨日はじめたばかりの者です。
とりあえずは「ブラウザに
http://localhost:3000 と打ったときにrailsのTOPコンテンツが表示されるのを目標 」
にして昨日今日とやってきたのですが最後の最後でつまづきました。
sudo rails new railsapp
cd railsapp
sudo bundle install
rails s
としたとき下記のエラーが出て
http://localhost:3000 にアクセスしても うまく表示されません。
どうすればよいでしょうか?
=> Booting WEBrick
=> Rails 3.0.9 application starting in development on
http://0.0.0.0:3000 => Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/Users/taro/.rvm/gems/ruby-1.9.2-head/gems/rack-1.2.3/lib/rack/server.rb:272:in `initialize': Permission denied - /Users/taro/railsapp/tmp/pids/server.pid (Errno::EACCES)
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/rack-1.2.3/lib/rack/server.rb:272:in `open'
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/rack-1.2.3/lib/rack/server.rb:272:in `write_pid'
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/rack-1.2.3/lib/rack/server.rb:207:in `start'
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/railties-3.0.9/lib/rails/commands/server.rb:65:in `start'
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/railties-3.0.9/lib/rails/commands.rb:30:in `block in <top (required)>'
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/railties-3.0.9/lib/rails/commands.rb:27:in `tap'
from /Users/taro/.rvm/gems/ruby-1.9.2-head/gems/railties-3.0.9/lib/rails/commands.rb:27:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
25 :
nobodyさん :2011/07/22(金) 16:06:34.45 ID:QEp81h1s
Permission denied - /Users/taro/railsapp/tmp/pids/server.pid (Errno::EACCES) rails new を sudo 付けて実行しているから、生成されたファイルやディレクトリが rootユーザーのものになっている。 chown して所有者を変えてもいいし、初回なのでrailsappを綺麗に消してから sudo なしでやりなおしてもいい。 rootでないと書き込めない箇所に書き込む必要があるときだけsudoを付ける。 rvmを使っているならbundleもsudo不要なんじゃないの?
bundle install --path vendor/bundle がおすすめ これなら他のプロジェクトのgemを気にしなくてよくなる
27 :
nobodyさん :2011/07/22(金) 16:40:08.56 ID:QEp81h1s
bundle --pathはおすすめだな。--binstubsもおすすめ。 あと、rails 3.1 rc4 は勝手に new 後に bundle を実行しやがるので、--skip-bundle 付けてる。
28 :
nobodyさん :2011/07/22(金) 16:54:56.26 ID:Z+KliAzH
29 :
nobodyさん :2011/07/22(金) 17:04:28.47 ID:Uhqw0ffO
あぁぁぁぁ!!!!!!!ありがとう!!!ついに!!ついに!!!
http://localhost:3000 で出てきました!!!
本当にありがとうございます!!!感動しました。
>>25 rvmはいっている場合はbundleもsudoも不要ですか?
そもそも、なぜbundleといって毎回railsのプロジェクトフォルダごとに
実施しないといけないのかがわからないです。
CakePHPとかの場合は純粋に初期で出来たフォルダを複製するだけで
新しいプロジェクトを始められるので。。。。。
>>26 bundleを気にしなくてもいいとはどういうことですか?
私の認識だとbundleはプラグインみたいなもので、
サーバーへアップロードする時にそれごとアップロードすることで
同じように動作してくれる。
こういう認識でしょうか?普通はサーバーに入ってるところから読み込んでくれそうなものですが。。。。。
>>29 > 私の認識だとbundleはプラグインみたいなもので、
> サーバーへアップロードする時にそれごとアップロードすることで
> 同じように動作してくれる。
それでだいたい合ってる
> 普通はサーバーに入ってるところから読み込んでくれそうなものですが。。。。。
グローバルな場所に gem を置いてしまうと、プロジェクトごとに gem のバージョンが違ったりすると面倒
プロジェクト内に閉じ込めてしまえばそんなことを気にしなくてもよくなる
31 :
nobodyさん :2011/07/22(金) 17:21:54.35 ID:Uhqw0ffO
>>30 なるほどー、よく分かりました。
ありがとうございました!
32 :
nobodyさん :2011/07/22(金) 17:24:22.45 ID:Z+KliAzH
33 :
13 :2011/07/22(金) 17:39:16.81 ID:WHc+Ckrb
たびたびすみません。検索って↓で良いんですよね? form_tag({:action => "search"},{:method=> "GET"}) do submit_tag'検索' コントローラにdef searchを置いたのですが、 ActiveRecord::RecordNotFound in VegetablesController#show Couldn't find Vegetable with ID=search というエラーになりなぜかshowに飛んでるようです。何故でしょうか?
rake routes してみな
35 :
13 :2011/07/22(金) 18:06:49.13 ID:WHc+Ckrb
>>34 コマンドを打ってみたら、追記したdef searchにrouteが書かれていないようです。
submit_tag'検索'でserchにrouteさせるにはどうしたらいいのでしょうか?
routes の件なんだから、config/routes.rb をいじるんだな
37 :
nobodyさん :2011/07/22(金) 18:30:21.48 ID:QEp81h1s
config/routes.rb に resources :vegetables というのがあると思うけど、
これでいくつかの規則が定義される。
http://guides.rubyonrails.org/routing.html それ以外は明示する必要がある。
RESTなんてどうでもいい場合 resouces :vegetables より前に、以下を追加
match 'vegetables/search' => 'vegetables#search'
RESTでがんばる場合、
search(検索)を「条件を付けた一覧」であると考えて
resources :vegetables do
collection do
get 'search'
end
end
試してないけどこんな感じだと思う。
38 :
nobodyさん :2011/07/22(金) 18:33:21.70 ID:Uhqw0ffO
拾ってきたrailsのサンプルファイルをtestフォルダに展開して $ cd test $ rails s としたときに下記のエラーが出てきてサーバーが立ち上がりません。 どうすればいいでしょうか? Usage: rails new APP_PATH [options] Options: -r, [--ruby=PATH] # Path to the Ruby binary of your choice # Default: /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/bin/ruby -d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/oracle/postgresql/sqlite3/frontbase/ibm_db) # Default: sqlite3 -b, [--builder=BUILDER] # Path to an application builder (can be a filesystem path or URL) -m, [--template=TEMPLATE] # Path to an application template (can be a filesystem path or URL) [--dev] # Setup the application with Gemfile pointing to your Rails checkout [--edge] # Setup the application with Gemfile pointing to Rails repository [--skip-gemfile] # Don't create a Gemfile -O, [--skip-active-record] # Skip Active Record files -T, [--skip-test-unit] # Skip Test::Unit files -J, [--skip-prototype] # Skip Prototype files -G, [--skip-git] # Skip Git ignores and keeps 中略 Description: The 'rails new' command creates a new Rails application with a default directory structure and configuration at the path you specify. Example: rails new ~/Code/Ruby/weblog This generates a skeletal Rails installation in ~/Code/Ruby/weblog. See the README in the newly created application to get going.
39 :
13 :2011/07/22(金) 19:43:18.79 ID:R9d1mjF2
ID変わってますが13@自宅です
>>37 match 'vegetables/search' => 'vegetables#search'
だと
undefined method `match' for main:Object
resources :vegetables do
collection do
get 'search'
end
end
だと
undefined method `collection' for main:Object
が出て動きません・・・
40 :
nobodyさん :2011/07/22(金) 20:06:18.60 ID:QEp81h1s
config/routes.rb の [APP]::Application.routes.draw do ... end の「後ろ」じゃなくて、「中」に書いて。
41 :
nobodyさん :2011/07/22(金) 20:10:24.08 ID:QEp81h1s
>>38 サンプルがRails3用でないために本来の動作をしているように見える。
script/rails があれば、railsコマンドはそいつを実行する。
そうでなければ本来のアプリひな形作成コマンドとしての動作をする。
42 :
13 :2011/07/22(金) 20:16:54.13 ID:R9d1mjF2
>>40 Railsのバージョン違うでしょうか?2.3.8です。
ActionController::Routing::Routes.draw do |map|
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => ''
〜略〜
map.root :controller => "vegetables"
map.resource :session
map.resources :vegetables
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'
end
43 :
nobodyさん :2011/07/22(金) 20:17:27.63 ID:Uhqw0ffO
>>41 rails3だと rails s ですよね?
script/rails が動くようにするには
rails2.0のほうも一緒にインストールしろってことですか?
44 :
sage :2011/07/22(金) 20:22:14.94 ID:???
/etc/hosts ファイルを設定したいんだけど ターミナルでのviの使い方がうまく分からないです。 127.0.0.1 phpmyadmin を追加したいのですが、 sudo vi /private/etc/hosts とした後、追加するには具体的にどのような操作をすればいいのでしょうか? またエディターなどから開いて編集とかは出来ないものでしょうか? 当方MacOS10.6 のスノーレパードです
>>43 持ってきたサンプルがrails2で作られたもんじゃね?ということ
>>44 スレチ
ggrks
46 :
nobodyさん :2011/07/22(金) 20:33:14.10 ID:QEp81h1s
>>42 失礼。2系だったのね。
やばい、2系のルーティングの書き方忘れているわ、俺。
非RESTなほうは
map.connect 'vegetables/search', :controller => 'vegetables', :action => 'search'
かな。上から順にテストされることに注意。
>>43 > rails3だと rails s ですよね?
YES
> script/rails が動くようにするには
そもそも、そのサンプルに script/rails はあるの? と尋ねたつもり。
あれば、サンプルのルートディレクトリで rails s とタイプしたときに
script/rails s に処理が委譲されてサーバが走り出す。
なければ、プロジェクトの外で rails s とタイプしたのと同義になり、Rails3では
そんな使い方はないので元の質問のように使い方が表示される。
> rails2.0のほうも一緒にインストールしろってことですか?
NO
47 :
13 :2011/07/22(金) 20:46:32.88 ID:???
>>46 serachに渡るようになりました!大感謝です。
・・・ここからが本題ですね。今日はもうやめます。
48 :
sage :2011/07/22(金) 21:28:59.19 ID:???
ホームディレクトリにいて rails generate model hoge hoge としたとき、モデルはどこの格納場所(user/binみたいなかんじで)に作成されますか?
49 :
sage :2011/07/22(金) 21:38:44.26 ID:Uhqw0ffO
showという空のアクションのみが入った
memberというコントローラーを作りました。
しかし
http://localhost:3000/member/show へ接続すると
RuntimeError
!!! Missing the mysql2 gem. Add it to your Gemfile: gem 'mysql2'
Rails.root: /Users/hoge/Cart
となります。どうすればいいですか?
エラーメッセージぐらい読めよ
51 :
sage :2011/07/22(金) 21:42:28.94 ID:Uhqw0ffO
>>50 すいません
gem install mysql2 も実施していたのですが
結果は同じでした。
52 :
nobodyさん :2011/07/22(金) 22:12:08.53 ID:QEp81h1s
>>48 ホームディレクトリでgenerater起動してもエラーと使用法が出るだけよ。
>>49 >>51 rails で雛形を作成する際に -d mysql を付けたなら
database.yml にも Gemfile にも mysql2 の指定があるはずだな……
あとは bundle 忘れ?
bundle show してみたときに mysql gem が出て来なければ
bundle install を実行。
53 :
sage :2011/07/22(金) 22:44:40.04 ID:Uhqw0ffO
>>52 ありがとうございます
bundle install しても mysql gem は出てこないようです
54 :
sage :2011/07/22(金) 22:56:24.37 ID:Uhqw0ffO
>>52 $ rails new Sample -d mysql
$ cd Sample
$ rails generate model member show
をしたら
Could not find gem 'mysql2 (~> 0.2.6)' in any of the gem sources listed in your Gemfile.
とのエラーが出ます。
Macって環境を作るだけでも本当に大変なんですね・・・・
55 :
sage :2011/07/22(金) 23:01:09.66 ID:Uhqw0ffO
>>52 gem listの中に mysql2 が入ってなかったので
sudo gem install mysql2 したときの結果がこれです。
MacBook-Pro:Sample mikeneko$ sudo gem install mysql2
Password:
Building native extensions. This could take a while...
ERROR: Error installing mysql2:
ERROR: Failed to build gem native extension.
/Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
creating Makefile
make
gcc -I. -I/Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/x86_64-darwin10 -I/Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/backward
-I/Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1 -I. -DHAVE_RB_THREAD_BLOCKING_REGION -DHAVE_MYSQL_H -DHAVE_ERRMSG_H -DHAVE_MYSQLD_ERROR_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE
-I/usr/local/mysql/include -Os -g -fno-common -fno-strict-aliasing -arch i386 -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings
-Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -fno-common -pipe -Wall -funroll-loops -o client.o -c client.c
In file included from /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby.h:32,
from ./mysql2_ext.h:8,
from client.c:1:
/Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/ruby.h:108: error: size of array ‘ruby_check_sizeof_long’ is negative
/Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/ruby.h:112: error: size of array ‘ruby_check_sizeof_voidp’ is negative
56 :
sage :2011/07/22(金) 23:01:24.96 ID:Uhqw0ffO
続き In file included from /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/intern.h:29, from /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/ruby.h:1327, from /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby.h:32, from ./mysql2_ext.h:8, from client.c:1: /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/include/ruby-1.9.1/ruby/st.h:69: error: size of array ‘st_check_for_sizeof_st_index_t’ is negative make: *** [client.o] Error 1 Gem files will remain installed in /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/lib/ruby/gems/1.9.1/gems/mysql2-0.3.6 for inspection. Results logged to /Users/mikeneko/.rvm/rubies/ruby-1.9.2-head/lib/ruby/gems/1.9.1/gems/mysql2-0.3.6/ext/mysql2/gem_make.out
57 :
nobodyさん :2011/07/22(金) 23:49:46.76 ID:QEp81h1s
1. rvm使ってるならmysql2 gemはホームディレクトリに入るべきなので、 sudoは付けないのが正しいのではなかろうか。 2. そのエラーはSIZEOF_LONGマクロとsizeof(long)の値が異なる時に出る。 ということは32ビットバイナリと64ビットバイナリをまぜこぜにしてるのかもしれない。 rubyはx86_64のようなので、 $ ARCHFLAGS="-arch x86_64" gem install mysql2 みたいなコマンドになりそう。 ちなみに sqlite3 の gem は何も考えずにインストール出来てる。
58 :
sage :2011/07/23(土) 00:14:53.86 ID:DljQLmyJ
>>57 ありがとうございます。もう諦めます。
MacOS10.6で環境を作るだけでもこんなに大変だと分かっただけでも収穫でした。
必要なモジュールやライブラリ関係が多すぎること
すべてコンパイルで入れなきゃいけないこと
いずれかのバージョンが少し違うだけでもNGなこと
海外も国内も MacOS10.6、rails3、ruby1.9、gem1.8.5、MySQLを組み合わせた
説明のあるサイトはほとんどありませんでした。
rails3とruby1.9自体がレアケースなんでしょうか
Linux素人の私には無理でしたorz
皆様ありがとうございました。
59 :
sage :2011/07/23(土) 00:20:03.21 ID:DljQLmyJ
最後に1つご質問させてください ターミナルから コンパイルして いろいろとインストールしたのですが これらが何だったのか?どこにインストールされているのか? が分かりません。これらを削除して最初の状態に戻したいのですが リスト一覧で表示したり、アンインストール方法するいい方法を知っていたら 教えていただけないでしょうか?
60 :
nobodyさん :2011/07/23(土) 00:20:25.65 ID:UfpWyc4E
61 :
nobodyさん :2011/07/23(土) 00:22:15.06 ID:UfpWyc4E
macってlinuxじゃないだろ ruby1.9とrails3の組み合わせは普通だぞ
63 :
nobodyさん :2011/07/23(土) 00:35:38.28 ID:UfpWyc4E
こういう人間がいるから、「PHPはすぐデプロイできるから便利!」てうたい文句が もてはやされるんだろうなぁ…
65 :
sage :2011/07/23(土) 02:25:04.35 ID:DljQLmyJ
素人で若輩者ですがお力お貸しください。 railsのプロジェクト作ったあとで ブラウザからそこのコントローラとアクションにアクセスすると Access denied for user 'root'@'localhost' (using password: YES) と出ます。 database.yml に問題があると思い、下のようにしても結果は同じです。 どこに問題が考えられますか? development: adapter: mysql2 encoding: utf8 reconnect: false database: db_development pool: 5 username: root password: hogepass socket: /tmp/mysql.sock
MySQLのパスワードが違っている。 OSのアカウント管理とは独立してMySQLのアカウント管理があるので、 rootのpasswordはシステムのそれじゃなくてMySQL用に別途設定するのだけど、設定してある? 設定してないなら、 # mysqladmin -u root password (新しいパスワード) 設定しているなら、 $ mysql -u root -p -S /tmp/mysql.sock db_development (パスワード入力) してアクセスできるか試してみれ。
67 :
sage :2011/07/23(土) 04:26:33.28 ID:DljQLmyJ
>>66 ありがとうございます。
>>63 さんの書いているruby stackでrailsに必要なものを一括で入れました。
インストール直後はMySQLサーバーも立ち上がっていてPhpMyAdminもつながるのですが
再起動後はMySQLサーバーが落ちています。
どうすれば再び立ち上げることが出来るのか分かりません >_<
68 :
sage :2011/07/23(土) 04:49:07.91 ID:DljQLmyJ
>>66 すいません
>>67 の件は自己解決しました
mysqladmin -u root password hogehoge としたところ
/Applications/rubystack/mysql/bin/mysqladmin.bin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
となり、出来ませんでした
69 :
nobodyさん :2011/07/23(土) 08:31:52.34 ID:DVSib5H8
既にパスワードが付いているぽいので、 mysqladmin -u root password newpass じゃなくて mysqladmin -u root -p password newpass では? ぶっちゃけ初心者なら mysql より sqlite3 のほうが一億倍楽だと思うけど…
70 :
nobodyさん :2011/07/23(土) 10:42:04.72 ID:UfpWyc4E
>>58 Macだとしても
その組み合わせは普通過ぎるので、
誰も解説書かないと思う。
特に問題起こらないし。
誰かが以前に書いてたとして、バージョンちょっと違うだけで、また同じエントリ書こうと思わないでしょ。
>>67 自動起動設定が入ってないのか…。
そのアプリみたいなの知らないけど、どこかに書いてあればその方法で。
書いてなければ自分でmysql探してコマンドで立ち上げる。
Mac用に配布されてるなら、
自動起動の設定が何処かにありそうだけど。
正直インストールは楽かも知れないけど、
こういう全部入りはあまりオススメしない。
73 :
nobodyさん :2011/07/23(土) 15:55:36.96 ID:DVSib5H8
macportsのmysql5-serverは $ sudo port load mysql5 でデーモンが自動起動する設定になる。
>>67 使ってて、うまくいってたと思って
mysqlの設定いじってたら
rails sを実行する時点でmysql2エラーが発生するようになった。
rubystackのディレクトリは独立してるからアンインストールと再度インストールで直ると思ってやったけど
やっぱり同じエラーが出る
最初の頃に自分でコンパイルして色々とインストールしようとした
エラー頻発したり dmgファイルでインストールしまくったりしたから
変な残骸か何かでシステムの中身が壊れてるのかな?
リセットした状態で普通にインストールできるような状態にならないでしょうか?
ちなみにMacOS10.6です
>>74 Gemfileに
gem 'mysql2', '< 0.3'
77 :
nobodyさん :2011/07/23(土) 18:35:42.79 ID:7CgsKONL
windowsに rails2.1 ruby1.8 netbeans6.1 の環境を入れたいです。 なんか相互間のバージョンの違いとかで動かなかったり インストールすら出来なかったりします。 rails2.1をnetbeans上で手早く扱えるようにするにはどうすればいいですか? rubystackの場合、rubysrack内のコンソール上でしか動かず netbeansの実行とかでは動くようになりませんもんね。
ちなみにxpです
>>78 WAMP入れて
cakephpフォルダ設置したら
間違いなくいきなり使えます!
とかとは違うよね。
railsの相互間の依存度は異常
どれか一つでもバージョン合わないとかで、しょっちゅう動かないし
今から参考ソース豊富な2.1したくても
gem install railsで最新が入って動かないし
gem install -v=2.1.0 rails ってしても
エラー出て入らなかったりする
>>80 そんな人のための bundler ですよ
>>81 bundle installしても、最近ダウンロードしたruby1.8とかに別途gem入れても相互間のバージョン合いませんって言われるし
入っても gem install -v=2.1.0 rails
がエラーで入らない
>>82 bundle install --path vendor/bundle ですよ
84 :
nobodyさん :2011/07/24(日) 00:11:10.78 ID:y8m7SKug
85 :
nobodyさん :2011/07/24(日) 02:38:46.02 ID:EbDs6EhB
ruby1.8.7をいれて gem install -v=2.1.0 rails --include-dependencies を実行することで netbeansで編集→サーバー起動 まで可能となりました。 しかし、サーバーをたちあげると下記が出てサンプルのrailsアプリが開けません。 どうすればいいでしょうか? MissingSourceFile in TopController#index no such file to load -- sqlite3/sqlite3_native RAILS_ROOT: C:/works/tes/page This error occurred while loading the following files: sqlite3 sqlite3/sqlite3_native
86 :
nobodyさん :2011/07/24(日) 02:46:19.42 ID:EbDs6EhB
ちなみにブラウザは立ち上がってます。 ただし上のエラーが出るってことです
エラーメッセージのまんまだと思うが…
88 :
nobodyさん :2011/07/24(日) 02:54:25.72 ID:EbDs6EhB
sqlite3.dllをいれることで自己解決しました。 rorはどうして、ここまでror本体でなくgem関係にも全て悩まされるのでしょうか? 簡単にrorのバージョンごとの切り替えを管理出来て 完全動作を保証したようなツールとかあればいいのですが
89 :
nobodyさん :2011/07/24(日) 02:55:16.65 ID:EbDs6EhB
>>87 でも、そのエラーだとsqlite3.dllをruby/binに入れろとは分かりませんよね。。。
ググって海外サイトを見て初めて分かりました
90 :
nobodyさん :2011/07/24(日) 04:31:16.80 ID:EbDs6EhB
質問させてください。 Windowsに XAMPP RAILS などを入れて利用しています。 投稿の際に日本語を使った時点で文字化けを起こします XAMPPで入ったMysqlは初期では latinなどの文字列が設定されているようです。 my.cnfに下記を追記すればいいとのことでしたが c:\xampp\mysql\binの中に my.cnfが 見当たりません 隠しフォルダの表示や登録外拡張子も表示させています。 どうすればいいでしょうか?? [mysqld] default-character-set=utf8 skip-character-set-client-handshake
91 :
nobodyさん :2011/07/24(日) 07:32:44.15 ID:EbDs6EhB
みんなエディタ/IDEなに使ってるの?
ブラウザのjavascriptを無効にしてたら jqueryは動かなくなる?
95 :
nobodyさん :2011/07/24(日) 10:34:43.30 ID:HwC1Njq1
database.ymlは?
>>92 vim 一応 rails.vim入れてるけど殆ど使ってない
>>82 bundle exec つけて実行していないとか?
bundle exec rails server
とかで実行すれば、bundlerのバージョンが利用されるよ
98 :
nobodyさん :2011/07/24(日) 18:11:04.96 ID:y8m7SKug
それにしても、Windowsを窓から投げ捨てるところから始めれば 躓くことが少なくていいんじゃないかな。
100 :
13 :2011/07/25(月) 12:01:23.68 ID:IAHMsfps
collection_Selectを4つ作り、controllerに渡して各パラメータを @collection=で [" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット'] というふうに整形しました。 これを view/vegetables/index.html.erbで <% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%> として実行すると undefined method `%' for ["[\""]:Arrayというエラーが出ます。 整形したものをべた書きすると綺麗に通りますが、@collectionで代入すると エラーです。 何故でしょうか?
掲示板とか 決まりきった機能 を組み込んでIDとパスワードを渡すだけで すぐ使えるような組み込み型のモジュールとかってあるんですか? あるとしたら、こういうタイプの組み込み型モジュールの呼称って何ですか?
102 :
nobodyさん :2011/07/25(月) 12:20:36.38 ID:eJ//7zAn
engines
>>102 ありがとう!調べてみたらログイン用とかあるんですね。
普通はwebサービスとか作る時って
自分で一から作るものですか?
それともこういったエンジンを部分利用して作業を極力軽減するのかな?
CMS作るときに、とあるStringフィールドを設けようと思います。 ただし、このフィールドは 英字のみだったり、 英数のみだったり、 半角のみだったり、 数字4桁+数字4桁+数字4桁だったり、 全角可能だったりと フォーム入力時点のユーザー毎にバリデーションが異なります。 こういうのって標準のバリデーションではなく 正規表現を使って、それぞれのバリデーション検証を行うのが正しいですか? また、そのユーザーのバリデーションパターンを決めるのも第三者が フォーム入力で決めていく形です。 どういう流れに持っていくのが一般的ですか?
105 :
13 :2011/07/25(月) 14:01:51.45 ID:IAHMsfps
>>100 のものです。
<% @vegetables = Vegetable.find(:all, :conditions=>@condition).each do |vegetable| -%>
を
<% @vegetables = Vegetable.find(:all, :conditions=>[@condition]).each do |vegetable| -%>
としましたが、結果は同じでした。
@conditionが別に定義されているかも知れないので@cndなど別の変数にしたが結果は同じでした。
undefined method `%' for ["[\""]:Arrayというエラーはググッても1件も出てきません・・・。
当方Rails2.3.8です。
宜しくお願い致します。
>>105 Rails2.3.8で似たようなコードを書いてもエラーにはなりませんでした。
そもそも、[ "[\"" ] というlength=1の配列はどこから来ているのかが気になりますね。
@conditionの定義部分でタイポとかないでしょうか?
107 :
13 :2011/07/25(月) 16:45:54.91 ID:IAHMsfps
>>106 vegetables_controller.rbに
if params[:hinmoku_id]
@cnd = []
@cnd << ["[ \""]
@cnd << ["hinmoku = ? "]
end
と、直書きしてます。
でも@cnd << ["[ \""]を削っても、
undefined method `%' for ["hinmoku = ? "]:Array
となって同じでした。
[" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット'] としたいんですよね。 であれば、<< ではなくて、+= じゃないですかね。 controllerで、 logger.debug @cnd.inspect や viewで <%=h @cnd.inspect %> で見てみると、@cndが2重配列になっていると思います。
>>107 と、根本的なところですが、Viewでfindとかを書くのはあまり推奨されないので、
こんな感じでリファクタリングしていくと良いかなと思います。
Rails2.3.4から標準で入っているnamed_scopeと
named_scopeをデフォルトで色々定義してくれるsearchlogicというpluginを使って
https://github.com/binarylogic/searchlogic 1回目のリファクタリング
[controller]
search = Vegetable
search = search.hinmoku_id_eq(params[:hinmoku_id]) if !params[:hinmoku_id].blank?
search = search.kaikyu_id_eq(params[:kaikyu_id]) if !params[:kaikyu_id].blank?
search = search.kikaku1_id_eq(params[:kikaku1_id]) if !params[:kikaku1_id].blank?
search = search.kikaku2_id_eq(params[:kikaku2_id]) if !params[:kikaku2_id].blank?
@vegetables = search.all
>>109 続き
このままだとcontrollerが肥大化してしまうので、modelに回します。
2回目のリファクタリング
[controller]
@vegetables = Vegetable.search(params).all
[model]
class Vegetable
def self.search(params={})
search = self
search = search.hinmoku_id_eq(params[:hinmoku_id]) if !params[:hinmoku_id].blank?
search = search.kaikyu_id_eq(params[:kaikyu_id]) if !params[:kaikyu_id].blank?
search = search.kikaku1_id_eq(params[:kikaku1_id]) if !params[:kikaku1_id].blank?
search = search.kikaku2_id_eq(params[:kikaku2_id]) if !params[:kikaku2_id].blank?
search
end
end
>>110 続き で、3回目のリファクタリングで
modelのメソッドをArrayのinjectと、文字列からメソッド発行ができるsendを使ってスリムに
[model]
class Vegetable
def self.search(params={})
[:hinmoku_id, :kaikyu_id, :kikaku1_id, :kikaku2_id].inject(self){|search, param| params[param].blank? ? search : search.send("#{param}_eq",params[param]) }
end
end
動作未検証ですが、参考までに。
112 :
13 :2011/07/25(月) 17:42:26.98 ID:IAHMsfps
>>108 <%=h @cnd.inspect %>
でみると、
["\"", "hinmoku = ? ", "and kaikyu = ? ", "and kikaku1 = ? ", "and kikaku2 = ?", "\"", ", '", "バナナ", "'", ", '", "2L秀", "'", ", '", 5, "'", ", '", "個ネット", "'"]
になってました。
でも、"とか\を取ると、それはそれで動かなくなるんですが、
根本的に記載方法を間違えているのでしょうか???
そもそも何で"\""を配列に入れようとしているのか…
>>100 を素直に代入すればいいだけだと思うが…
114 :
13 :2011/07/25(月) 17:58:53.48 ID:???
>>109 書き込み気付きました。
のちのちのメンテを考えるときれいにしときたいので、
頂いたアドバイスをもとに頑張ってみます
>>112 [" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
になるようにゴリゴリ書けば、
@cnd_first = []
@cnd_last = []
[hinmoku]
@cnd_first << "hinmoku = ?"
@cnd_last << "タマネギ"
[kaikyu]
@cnd_first << "kaikyu = ?"
@cnd_last << "L"
@cnd = [@cnd_first.join(" and ")] + @cnd_last
でいけるかな
116 :
13 :2011/07/25(月) 18:01:29.60 ID:???
>>113 [" hinmoku = ? and kaikyu = ? and kikaku1 = ? and kikaku2 = ? ", '玉ねぎ', 'L', '3', '個ネット']
を再現するように、
["を書くために"[\""て書きました。
あぁ…全部文字列だと思ってたのね… Rail がどーたら言う前に、Ruby を勉強した方がいいよ その方が問題解決にはずっと近道だし、今後似たようなことで悩まなくてよくなるから
118 :
nobodyさん :2011/07/25(月) 18:17:18.52 ID:eJ//7zAn
119 :
nobodyさん :2011/07/25(月) 18:46:03.06 ID:G/8niHgC
120 :
nobodyさん :2011/07/25(月) 18:51:27.50 ID:eJ//7zAn
ログイン系のプラグインでCaptchaが標準でついてるのはないのかな?
ログインとCaptchaって意味ないと思うが… サインアップなら分かるが
>>122 サインアップ機能(ログイン機能つき)でCaptcha付きのことです
125 :
nobodyさん :2011/07/26(火) 12:31:51.33 ID:QroQWCDs
>>124 これって、ただのキャプチャ単体ですよね?
探してるのはキャプチャが組み込まれているログイン管理・新規登録機能プラグインです。
>>126 よく嫁
そのページはdeviseという認証機能プラグインのプロジェクトの中にあるだろ
「それはラジオよ。」 友達のおばちゃんに言われた。
129 :
nobodyさん :2011/07/26(火) 13:54:41.22 ID:QroQWCDs
130 :
nobodyさん :2011/07/26(火) 14:01:13.57 ID:QroQWCDs
deviseはサインアップ時の確認画面がないのがちょっと
だったら自分で作れ
作ったけど何か?
134 :
nobodyさん :2011/07/26(火) 17:19:42.49 ID:QroQWCDs
しかし、確認画面って日本独特なんだろうね。 サインアップで間違っても、編集ページで直せば良いじゃん。ってことなんだろつ。
136 :
nobodyさん :2011/07/27(水) 22:35:28.41 ID:ZS4k7BV+
rails2.x rails3.x それぞれでの 主流のログイン認証プラグインとgemって何がある? 出来れば今もサポートされてるので。
140 :
nobodyさん :2011/07/28(木) 23:53:05.56 ID:4Q9csvAm
141 :
nobodyさん :2011/07/29(金) 00:13:17.03 ID:Tkg/4Pbb
142 :
nobodyさん :2011/07/29(金) 02:46:50.92 ID:Tkg/4Pbb
143 :
nobodyさん :2011/07/29(金) 15:17:50.97 ID:NreIb2ba
既存のレコードをeditで編集し変更した内容を submitボタンを2つにしてそのままupdateと新規insertにしたい。 もしくはレコードのコピー+idの採番 をしたいのですが、どうやったら可能でしょうか?
144 :
nobodyさん :2011/07/29(金) 15:31:54.32 ID:Tkg/4Pbb
145 :
nobodyさん :2011/07/29(金) 17:33:27.53 ID:NreIb2ba
143です。 もしくは、indexのshow | edit | destroyにcopyとつけても良いです。 試しにlink_to '複製', new_vegetable_path(vegetable)としたら 真っ白になりました・・・。
146 :
nobodyさん :2011/07/29(金) 19:43:08.17 ID:Tkg/4Pbb
147 :
nobodyさん :2011/07/29(金) 19:50:18.37 ID:Tkg/4Pbb
148 :
nobodyさん :2011/07/29(金) 21:08:00.14 ID:JxuS3wyn
>>143 submitに名前を付けておいて受け取った側で識別、
createとupdateを呼び分ける。
>>145 copyの方がviewの無理がないので、自分ならそっちにします。
newに飛ばしても当然ダメなので、controllerにmethod追加かな。
150 :
nobodyさん :2011/07/30(土) 01:18:55.43 ID:K7JH1lDj
151 :
nobodyさん :2011/07/30(土) 07:35:59.46 ID:K7JH1lDj
152 :
143 :2011/07/30(土) 13:14:39.45 ID:4R4YZGj/
>>149 [view]のindexに、show | edit | destroyにcopyを追加
link_to 'copy', vegetable, :action => :copy, :method => "POST"
[controller]
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable_g])
# respond_to do |format|
# format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
# format.xml { head :ok }
# end
respond_to do |format|
format.html { render :action => "index" }
format.xml { render :xml => @vegetables }
end
end
[error]
白い画面に
Unknown action
No action responded to 11. Actions: copy, create, destroy, edit, index, new, search, show, and update
とでて動きません・・・。
153 :
nobodyさん :2011/07/30(土) 13:57:37.37 ID:jkxkSy7w
>>152 RESTルーティング書いた?
resources :vegetables do
member do
post :copy
end
end
と書くと、 copy_vegetable_url(id) or copy_vegetable_path(id) を使って
/vegetables/:id/copy に POST できるとおもう。
154 :
143 :2011/07/30(土) 14:44:49.60 ID:4R4YZGj/
>>153 route.rbに以下を書いていました。
map.connect 'vegetables/copy', :controller => 'vegetables', :action => 'copy'
頂いたコードを記入しましたが、動きません。当方Rails2.3.8です。
155 :
nobodyさん :2011/07/30(土) 15:02:20.15 ID:jkxkSy7w
2系だったか。 エラーメッセージをよく見ると、copy はアクションの一覧にあるな。 でもって 11 がアクションだと見なされているように見える。 link_to 'copy', vegetable, :action => :copy, :method => "POST" は、 link_to 'copy, :action => :cppy, :id => :vegetable.id, :method => 'post' だろうか、と思ったが、link_to(=アンカー要素)でPOSTって出来るの? 3系のUnobtrusive JavsScriptを使った奴は裏でformをつくってそこからPOSTしてくれるけど。 あと、とりあえず rake routes。
156 :
nobodyさん :2011/07/30(土) 15:06:04.33 ID:jkxkSy7w
2だと、 link_to_remote を使ってAJAXでPOSTするのかな。
157 :
143 :2011/07/30(土) 15:17:12.42 ID:4R4YZGj/
rake routes忘れてました・・・。実行しました。 あと、indexの記述を頂いた↓にしました。 link_to 'copy, :action => :cppy, :id => :vegetable.id, :method => 'post' エラーは、↓になりました。 ActiveRecord::RecordNotFound in VegetablesController#copy Couldn't find Vegetable with ID=1989628 このIDはなんぞ?レコード数は、まだ15です。
158 :
143 :2011/07/30(土) 15:20:40.70 ID:???
教則本(Head First Rails)が2.3系だったので、VPSに入ってたのを わざわざダウングレードして使ってるんです。rubyも1.8.7だし。 これから覚え始めるのなら3系の1.9が良かったのかも・・・。
159 :
143 :2011/07/30(土) 16:30:59.00 ID:4R4YZGj/
143です。いろいろ試したところ、
link_to 'copy', :action => :cppy, :id => :vegetable.id, :method => 'post'
を
link_to 'copy', :action => :copy, :id => vegetable.id, :method => 'post'
とvegetable.idの前の「:」を取ったらエラーがなくなりました。
が、複製は動きません。
indexの「copy」のリンクは下記が生成されています。
http://127.0.0.1:3000/vegetables/copy?id=10&method=post コントローラは下記です。
[controller]
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable_g = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable_g])
respond_to do |format|
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
end
end
160 :
nobodyさん :2011/07/30(土) 16:51:22.80 ID:jkxkSy7w
# :vegetable は typo でした。 rake routes は実行すること自体にdb:migrateのように意味があるわけではないので、 出力に意図する規則が定義されているかを確認したのでなければやった意味がない。 vegetables/copy という規則はあるのかな?
161 :
143 :2011/07/30(土) 17:28:27.49 ID:4R4YZGj/
出力の規則の定義ですか? indexに足された1レコードが増えて再レンダされればいいという感じで、 respond do でそのままindexを実行するように書いているつもりです。 (デフォルトのdef deleteのコピペですが)
162 :
143 :2011/07/30(土) 17:44:47.80 ID:???
つづけざますみません。 下記のようにしたら、空のレコードがinsertされるようになりました。 あと少しっぽいのですが・・・。 respond_to do |format| if @vegetable.save format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') } format.xml { head :ok } else format.html { render :action => "index" } format.xml { render :xml => @vegetable.errors, :status => :unprocessable_entity } end end
163 :
nobodyさん :2011/07/30(土) 18:38:07.83 ID:jkxkSy7w
params[:id] が取れさえすれば、対応するレコードをDBから引っ張ってきて、 同じ情報でnewして保存するだけだよね?
164 :
nobodyさん :2011/07/31(日) 17:33:31.50 ID:hcUrE+vc
165 :
nobodyさん :2011/07/31(日) 19:05:07.22 ID:hcUrE+vc
166 :
nobodyさん :2011/07/31(日) 23:53:14.26 ID:jRRlvPfa
プログラム板から移動してきました。 Railsで複数のデータベースに接続するときはどうすればいいのでしょうか? ただし、条件として、 1.AのデータベースもBのデータベースもスキーマは一緒。だからクラスも同一のものを使う。 2.データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。 3.複数のデータベースへは同時に接続します。つまり現在のリクエストで一つのデータベースにしか 接続しないということではなく、一つのリクエスト内で複数のデータベースに接続します。 のが前提です。 やりたいことは、あるデータベースに入っているデータを 他のデータベースに移すような処理と考えてください。
>>167 やっぱりコアではない他の何かを使うことになるんですね。
しかし、なんで複数のデータベースを同時に使うような
設計になってないのでしょうか?
これ、Railsだけじゃなくて他のフレームワークも同じ気がします。
(たしかCakePHPやPerlのCatalystも同じような設計だった)
モデルの共通情報(実質グローバル変数)としてコネクションがモデルと一体化されており、
たしかにモデルを使う分にはコネクションを指定せずに楽かもしれないですが
そのせいで複数のデータベースを同時に使えない。そのような設計にしか見えないです。
データベース接続とモデルは分離するのが正しい設計だと思うのですが・・・
この設計に問題があると言ってる人はいないんでしょうか?
そういう人の話を聞いてみたいです。
うーん。octopusって先にymlに使用するデータベースを 複数定義しておくものなのかなぁ? > 2.データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。 があるから、それができないんだよね。 もしかしたら別にやり方ある? まあもうちょっと調べてみるけど。
Django最強
>>168 RailsのActiveRecordはその名の通りActiveRecordパターンなので、
データベース接続とモデルを一体化させることでシンプルにORMを実現している。
いうなれば世のウェブアプリの95%のケースを簡単にするために5%は切り捨てているわけ。
トレードオフの問題だよ。
正しいかどうかで言えば、「データベースサーバーの数は可変。エンドユーザーの操作で増えたり減ったりする。」という設計は正しいの?
172 :
nobodyさん :2011/08/01(月) 03:54:32.50 ID:alQ6X3qm
ActiveRecordでその要件を満たすちょうどいいプラグインとか、定石はちょっと思い付かないな。 コネクションを都度切り替えるとか、DB分だけ大元のクラスを継承してそれぞれ別DBを指すようにするとか、泥臭いやり方ならいくつかあると思う。 二層コミットなんて期待できないから大変だと思うが。 まぁ、他のやつらもいってる通り、その設計はそもそも正しいのか。その設計がなんのために必要なのかが気になる。
負荷分散のためにマスターDBを複数に分散。ユーザIDによって接続先が変わる。 これが簡単にできればいいんだけどね。 どの有名フレームワークにもデフォルトではこんな機能は付いてないから 役立たずなプラグインに頼るか自前で強引にねじ込むしかないんだよね。 当然、Railsではエレガントに実装することが出来るんでしょ??
データベースを手動で移す処理が必要ってRDBMS使ってる意味ないよな
ユーザ系DBが複数に分散している場合、たとえばドラコレのガッツ組み手を考えてみよう。 ガッツ組みてでは自分のポイントを減算することと相手のポイントを増加させる処理が必要になる。 参照先DBが一つであれば単純にトランザクションを使えばいいが、ユーザーのIDによっては 接続先が二つに分かれる場合もある。 こういう処理をRailsでエレガントに処理できるんですか。
> ユーザ系DBが複数に分散 まずこの設計がエレガントではないのでどんなフレームワークを使おうがエレガントになりませんw
複数DBを同一モデルに適用して同時に使おうと考える時点で分散トランザクションが必須にならないか?
179 :
nobodyさん :2011/08/01(月) 19:55:08.50 ID:alQ6X3qm
180 :
nobodyさん :2011/08/01(月) 21:02:10.90 ID:alQ6X3qm
そもそも、業務系の要件を持ってるのかソーシャル系の要件を持ってるかもはっきりしないのにこんなリンクを得意気に貼るなんてミスリードでしかない。
182 :
nobodyさん :2011/08/01(月) 21:58:02.42 ID:alQ6X3qm
183 :
nobodyさん :2011/08/01(月) 22:03:03.94 ID:alQ6X3qm
http://www.infoq.com/jp/news/2010/10/MongoDB-1.6 MongoDB 1.6はシャーディングや障害発生時に自動的にデータベースの切り替えや復元を行うレプリカセットの追加により、スケールアウト問題を解決する。
MongoDB 1.6はすでにbit.lyやfoursquareによってプロダクトの中で使われている。bit.lyはピーク時には1000台のサーバを並列化して、およそ5000万人のユーザを支えている。また、Foursquareは数百万のユーザー
184 :
nobodyさん :2011/08/01(月) 22:05:01.60 ID:alQ6X3qm
>>177 > まずこの設計がエレガントではないのでどんなフレームワークを使おうがエレガントになりませんw
データベースが複数ってそんなに変?
アカウントごとにデータベースを分けるって
普通にやると思うんだけど?
>>177 藻前のような奴を井の中の蛙と言うんだな(藁
大量アクセス高負荷サイトならユーザ系DBを水平分割するのは当たり前なんだよ。
マジでこのスレはレベル低いな。
マジでワロタ(ゲラゲラ
アカウント毎にDB分けるのと、ユーザーデータの水平分割はそれぞれやり方が違う気がする。 アカウント毎の場合はクッキーとか見てリクエスト毎に接続先のDB切り替えでいいと思う。 ユーザーデータの水平分割のやり方は知らんが、これもユーザーIDで接続先切り替えだろ。 どちらも問題は一リクエストで複数のDBを扱うときのトランザクションだけど、俺は極力トランザクションが不要な設計にして、問題が起きた時にログから復旧できるようにしたらいいと思う。分散トランザクションのよい解決法を知らんだけだけど。
どっちにしろフレームワーク使うようなものではない > 大量アクセス高負荷サイトならユーザ系DBを水平分割するのは当たり前なんだよ。 そもそもruby使わないほうがいいんじゃね
189 :
143 :2011/08/02(火) 09:21:51.95 ID:gvG35C3d
>>163 > params[:id] が取れさえすれば、対応するレコードをDBから引っ張ってきて、
> 同じ情報でnewして保存するだけだよね?
そうだと思うのですが、どうしても空のレコードになってしまいます。
コントローラの記述は下記です。
どこがおかしいのでしょうか?
# POST /vegetables
# POST /vegetables.xml
def copy
@vegetable = Vegetable.find(params[:id])
@vegetable = Vegetable.new(params[:vegetable])
respond_to do |format|
if @vegetable.save
format.html { redirect_to(vegetables_url, :notice => '青果見積の複製が完了しました') }
format.xml { head :ok }
else
format.html { render :action => "index" }
format.xml { render :xml => @vegetable.errors, :status => :unprocessable_entity }
end
end
end
190 :
143 :2011/08/02(火) 10:04:28.60 ID:gvG35C3d
補足です。 respond_to doを下記にしたら品目名が取れましたので、findは成功しているようです。 あとはそのままnewしてくれるだけでいいのですが。 format.html { redirect_to(vegetables_url, :notice => @vegetable.hinmoku ) } format.xml { head :ok }
191 :
143 :2011/08/02(火) 10:44:58.57 ID:gvG35C3d
def copy @vegetable_g = Vegetable.find(params[:id]) @vegetable_h = Vegetable.new(params[:@vegetable_g]) respond_to do |format| if @vegetable_h.save やはり、@vegetable_h = Vegetable.new(params[:@vegetable_g])にパラメータが入らないのが原因のようです。 いろいろ試しているのですが・・・・。
192 :
143 :2011/08/02(火) 13:03:14.45 ID:gvG35C3d
自己解決しました。 下記のようにべた書きしたらコピーできました。 こんな書き方しなければいけないということはないと思うのですが・・・。 @vegetable = Vegetable.new(:kaikyu => @vegetable_g.kaikyu, :comment => @vegetable_g.comment,・・・
> @vegetable = Vegetable.find(params[:id]) > @vegetable = Vegetable.new(params[:vegetable]) 何がやりたいの?
>>191 @vegetable = @vegetable_g.dup
じゃだめなの?
鼻でかブサイクが質問してるスレはここですか 笑えますね
196 :
143 :2011/08/02(火) 17:46:04.37 ID:gvG35C3d
>>193 目的はレコードの複製です。
idでfindして得た項目をnewで作りたいです。
>>194 @vegetable_g = Vegetable.find(params[:id])
@vegetable = @vegetable_g.dup
respond_to do |format|
if @vegetable.save
としてみましたが、複製されずにindexに戻りました。。。。
データのコピーをしたい、という要望は結構あるね 自分が実際に使ったのは以下みたいなコード @user_org = User.where(:id => params[:id]).first @user = User.new @user.attributes = @user_org.attributes @user.name = "コピー" + @user.name @user.save
198 :
nobodyさん :2011/08/02(火) 20:24:15.90 ID:BAAVgQKN
>>196 params[:vegetable]は何?
>>199 たぶん、Ruby の基礎も何もわかってないんだろう
201 :
nobodyさん :2011/08/04(木) 00:22:23.02 ID:pv4SsPe4
202 :
nobodyさん :2011/08/04(木) 00:22:44.82 ID:pv4SsPe4
203 :
nobodyさん :2011/08/04(木) 08:29:30.03 ID:pv4SsPe4
204 :
nobodyさん :2011/08/04(木) 21:59:32.24 ID:pv4SsPe4
205 :
nobodyさん :2011/08/05(金) 01:03:33.16 ID:Vv89ZuLF
206 :
nobodyさん :2011/08/05(金) 01:33:38.19 ID:Vv89ZuLF
207 :
nobodyさん :2011/08/05(金) 06:41:16.51 ID:Vv89ZuLF
208 :
143 :2011/08/05(金) 13:05:10.41 ID:kWLQpcrd
おかげさまで、アプリが完成しました。ご助言有難う御座います。 完成したので、DBをPostgreに移行しようと思い、yaml_dbというプラグインで rake db:load RAILS_ENV=development とし、db/data.yamlファイルを作成しました。 config/database.yamlを development: adapter: postgresql encoding: unicode database: vegetables_development pool: 5 username: hoge password: fuga とし、 Postgre上でDB、vegetables_development(同test同production)を作成。 rake db:load RAILS_ENV=development を実行すると、 rake aborted! PGError: ERROR: relation "users" does not exist というエラーが出ます。(この"users"というのはログイン認証用のTableです) rake db:migrateを実行しても同じです。 別のRailsを作って、スカッフォード→db:migrateしたら正常に動くので Postgre⇔Rails間は正常に動いていると思います。 rails2.3.8 rake0.8.7 pg0.11
controller と action から url_for() で url は取得できるんですが url から controller と action を取得することは可能なんでしょうか?
可能
211 :
209 :2011/08/05(金) 14:25:08.62 ID:???
>> 210 そのようんですね。自己解決しました。 url = url_for(options) ca = ActionController::Routing::Routes.recognize_path(URI.parse(url).path, {:method => :get}) controller, action = ca[:controller], ca[:action] rails 2.8 だとこれでとれました。
212 :
143 :2011/08/05(金) 16:02:18.18 ID:kWLQpcrd
208です。 rake db:load RAILS_ENV=development --traceの実行結果です。 (in /home/rails/vegetables) DEPRECATION WARNING: Rake tasks in vendor/plugins/yaml_db/tasks are deprecated. Use lib/tasks instead. (called from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/tasks/rails.rb:10) ** Invoke db:load (first_time) ** Invoke db:schema:load (first_time) ** Invoke environment (first_time) ** Execute environment rake aborted! PGError: ERROR:relation "users" does not exist : SELECT a.attname, format_type(a.atttypid, a.atttypmod), d.adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"users"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract_adapter.rb:221:in `log' ・ ・ ・ というかんじです。
213 :
nobodyさん :2011/08/06(土) 21:59:29.22 ID:MeG5w6yR
さくらvps256で40万/pv余裕だぞ $60とかアホ
間違えた40万pv/dayな しかも1年半前の記事じゃねーか死ねヴォケ!
エサやるなよ
217 :
nobodyさん :2011/08/07(日) 13:27:17.63 ID:m3JRgASR
218 :
nobodyさん :2011/08/08(月) 01:37:41.60 ID:MisXO1oa
219 :
nobodyさん :2011/08/08(月) 01:44:42.19 ID:MisXO1oa
220 :
nobodyさん :2011/08/09(火) 05:12:01.97 ID:HfOK6pTF
221 :
nobodyさん :2011/08/09(火) 11:22:34.35 ID:HfOK6pTF
222 :
143 :2011/08/09(火) 11:48:50.26 ID:fDKK4Lp7
>>208 ですが、何か原因はお判りにならないでしょうか。
お願いします。
223 :
143 :2011/08/09(火) 11:52:40.83 ID:fDKK4Lp7
rake db:migrette --trace
rake db:schema:load --trace
でも
>>210 とおなじエラーになります。
database.yamlをaqlite3に戻すと正常に動くしloadもmigrateも上書きできるので
schemaやmigrateのファイルがおかしい訳ではないと思うのですが・・・。
224 :
nobodyさん :2011/08/09(火) 12:53:24.30 ID:fDBHDCIP
初心者です、教えてください。 RMagickを使ってみたいのですが、 \app\controllers\images_controller.rbの冒頭にrequire 'RMagick'を入れているのですがエラーになります This error occurred while loading the following files: RMagick Rubyは、Ruby1.87 RMagickは、rmagick-2.12.0-x86-mswin32.gem をgemでインストールしてあり、 Ruby187\lib\ruby\gems\1.8\gems\rmagick-2.12.0-x86-mswin32 にbinをはじめファイルがあることを確認しています。 Windows7 64bitです。よろしく、お願いします。
まぁこんなところになるのかな? ・require 'RMagick' の前に、require 'rubygems'を入れてみる。 ・コマンドプロンプトで gem list を打ったら rmagickがリストアップされるか。 ・そもそも image magickは入っているか。(rmagickはimagemagickのラッパー)
226 :
143 :2011/08/09(火) 17:09:55.32 ID:fDKK4Lp7
>>208 です。
以下のことを行いました。
1. bundle、yaml_db、pgを再インストール再実行
→特に症状変わらず
2. DEPRECATION WARNING: Rake tasks in vendor/plugins/yaml_db/tasks are deprecated. Use lib/tasks instead. (called from /usr/lib/ruby/gems/1.8/gems/rails-2.3.8/lib/tasks/rails.rb:10)
対策として、vendor/plugins/yaml_db/tasksをリネーム
→エラー表示が下記に変わった
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
uninitialized constant Rails::Railtie
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:440:in `load_missing_constant'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:80:in `const_missing'
/usr/lib/ruby/gems/1.8/gems/rspec-rails-2.6.1/lib/rspec-rails.rb:3
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:156:in `require'
・
・
・
(以下略)
冒頭の「uninitialized constant Rails::Railtie」というエラーが気になるのですが
ググッても有効な情報がない&英語でよくわからない、という情けない状況です。
何卒、お助け下さい
227 :
143 :2011/08/09(火) 17:47:56.27 ID:fDKK4Lp7
>>208 です
Passengerの表示するエラーです。
There appears to be a database problem.
1.Your config/database.yml may not be written correctly. Please check it and fix any errors.
database.ymlは以下です(userとpasswordは変更してます)
development:
adapter: postgresql
encoding: unicode
database: vegetables_development
pool: 5
username: hoge
password: fuga
2.Your database schema may be out of date or nonexistant. Please run rake db:migrate to ensure that the database schema is up-to-date.
migrateすると上記エラーが出ます
3.The database server may not be running. Please check whether it's running, and start it if it isn't.
postgresqlをrestartしても状況は変わりません。
正常に起動します。
rake db:createをするとalredy existと出るので、動いてる&認証もOK&railsからアタッチも出来ていると思います。
228 :
224 :2011/08/09(火) 22:19:39.48 ID:fDBHDCIP
>>225 さん
224です。さっそくのアドバイス、ありがとうございます。まだ、同じエラーが出ています。
>・require 'RMagick' の前に、require 'rubygems'を入れてみる。→ 入れました。
>・コマンドプロンプトで gem list を打ったら → rmagick (2.12.0 mswin32, 1.14.1 win32)とリストアップされました。
>・そもそも image magickは入っているか。→ 入っていて、環境変数のPathにインストールしたパス、"J:\ImageMagick-6.5.6-Q8"が入っています。
何か、分かりましたら、よろしく、お願いします。
229 :
nobodyさん :2011/08/10(水) 03:21:50.16 ID:u2UyTfAe
230 :
nobodyさん :2011/08/10(水) 08:22:27.55 ID:u2UyTfAe
232 :
nobodyさん :2011/08/10(水) 14:48:08.50 ID:u2UyTfAe
233 :
nobodyさん :2011/08/11(木) 08:58:31.97 ID:HyFoc2Xo
234 :
nobodyさん :2011/08/11(木) 10:41:08.00 ID:HyFoc2Xo
bundlerでgemのアップデートをかけると 古いgemファイルがどんどん残っていくじゃないですか (bundlerのインストールポイントを指定していた場合) あれをきれいに消す良い方法はないのでしょうか。
gem cleanup ぐぐれよ
railsスレってURL張りすぎだろ
238 :
nobodyさん :2011/08/11(木) 20:54:01.86 ID:97Y8lSst
>>235 > bundlerのインストールポイントを指定していた場合
--path vendor/bundle みたいな場合ってことだよね?
削除してもう一回bundleするくらいじゃねーの?
239 :
235 :2011/08/12(金) 10:28:02.07 ID:???
>>238 なるほど、確かにそれでいいですね!
ありがとうございます!
240 :
nobodyさん :2011/08/12(金) 17:49:40.78 ID:jOqVfl+Y
241 :
nobodyさん :2011/08/14(日) 08:09:08.22 ID:l8hCtuX0
242 :
nobodyさん :2011/08/14(日) 10:17:03.37 ID:l8hCtuX0
243 :
nobodyさん :2011/08/14(日) 10:27:06.94 ID:l8hCtuX0
244 :
nobodyさん :2011/08/14(日) 12:21:51.31 ID:l8hCtuX0
245 :
nobodyさん :2011/08/14(日) 15:25:33.35 ID:l8hCtuX0
Redmine使うためにruby入れたけど重い。PHPのAPCみたいにアクセラレーターはないのですか?
User name:(etc 太郎,花子) id:primary Post body:(etc 花子さんと遊んだ,私は花子です) id:primary user_id:integer こういう状況で Post.body及びUser.nameから ”花子” を検索して発言者が”花子” or 投稿内容に”花子”が含まれる 投稿(=Post)を検索して一覧表示&ページングをしたいです 花子が一人しかいないならば user = User.find_by_name("花子") #conditions => ["user_id = ? OR body LIKE ?" , user.id.to_s , "%#{@keyword}%"] で取得できるのですが 山田花子 田中花子 と花子はたくさん居ます 最悪Postに名前を追加することも考えたのですが 花子さんが名前を変更したときにとても面倒くさいことになるのでどうにか追加せずに行いたいです 何かいい方法はありませんか?
>>246 Passenger なり unicorn なりお好きにどうぞ
>>247 Rails2.x
posts = Post.find(:all, :include => 'user', :conditions => ['user.name = ? OR post.body LIKE ?', @keyword, "%#{@keyword}%"])
Rails3.x
posts = Post.include(:user).where('user.name = ? OR post.body LIKE ?', @keyword, "%#{@keyword}%").all # 最後の .all は必要ない場合もある
未実行なのでミスがあるかもしれんが、そこは適当に
250 :
nobodyさん :2011/08/15(月) 01:02:45.45 ID:5JDlDFBi
includeはeager loadingのためのものなので、joinすべき。
253 :
nobodyさん :2011/08/15(月) 16:00:37.80 ID:CyQXpCdY
職場でRSpecを使っていて疑問に感じたので書き込みました 使っているみなさんBDDでの開発って何処までできているのでしょう? 振る舞い駆動開発って、仕様を策定する側は、何も無い状態から自分が何をしたいのかが かなり詳細に指定できて 実装側はプログラムという複雑なものを漏れなく設計できるって言う仮定が暗にあるように見えます そんな都合の良い現実なんてプロジェクトが10あったら1個か2個だけだと思うので BDDの有効さは認めるとして、多数派にはなりえない様に感じたのですが 他の皆さんのご意見がどうでしょうか?
>>253 > そんな都合の良い現実なんてプロジェクトが10あったら1個か2個だけだと思うので
この部分、どういう意味で「そんな都合の良い現実は少ない」と言ってるのかわからんので、
なんとも言いようがない
現実はどんな問題があってBDDを採用しにくいのか、まずはそこを分析してほしいな
プロジェクトの設計時点でBDDなり考えて作ってないから?
なんで plugin じゃ、ダメなの? C:\rails\calendar>rails plugin install git://github.com/elevation/event_calendar.git C:\rails\calendar>rails generate event_calendar C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.9/lib/rails/plugin.rb:87:in `block in <class:Plugin>': "event_calendar" is a Railtie/Engine and cannot be installed as a plugin (RuntimeError)
こいついい加減アク禁とかできねえの?
rails3.1来た?
rc6が一週間ぐらい遅れたから、3.1.0も遅れるだろうな
Niftyの話題は?
nifty?
rails 3.1 の opened issue が消化されたな いよいよリリースだな
たこ焼き仮面さんが明日って言ってたね
285 :
nobodyさん :2011/08/30(火) 19:08:23.53 ID:I/05nH8H
直前まで色々問題起こしてたっぽいSprocketsも2.0正式版になったし、Rails 3.1も いよいよだね
なんで3.1を3.0にしなかったん?
リリースしてからバグが見つかったんだろw
3.1は新機能人柱版 安定版は3.0
290 :
nobodyさん :2011/08/31(水) 08:51:46.66 ID:q1Exa6cj
3.1は短命で、3.0->3.1よりは短期間で3.2が出るという話があったよーな。
3.1でガラっと変わりすぎ... 変化に対応する事に毎年労力を割かないといけない状況ってどうなの? そろそろPythonで相当いいFW出て来て勢力図一変するんじゃないかと
railsは着いてこれない人は置いていく方針だからさ
でもそれ誰得なの?って感じ 内輪だけで盛り上がってもつまんないじゃん 色んな層が飛び付いたからこそRailsは輝いたわけで
まぁそういうスタンスで来たからからこそ今のRailsがあって、 我々がイイね!使おう!と思えるモノになっているわけでして。 誰得というけど、それを言うならもう我々はそのRailsの態度から 既に大量の得を貰ってしまっていると言うべきかと。 エンジニアも知らず知らずのうちに既得権益者的な発想に陥ってしまうことがある。 「俺らはこれに慣れているんだ、なんで変えるんだ!?」と。 これは注意しなけりゃならん。
移り変わりが激しいのは良し悪しとして、日本人(というか英語ができない)ユーザは 置いてけぼり感が大きいのは確かかもね 啓蒙にがんばってくださってる日本人の方もいるにはいるんだけど、絶対数が足りない
というか啓蒙してる人減ってるよね 数年前まではRailsがweb界隈の相当大きな潮流だったから色んな人が英語圏情報をドンドン和訳してた 最近はRuby/Railsが一段落してJavaScript界隈が最先端的な空気になってる気が
3.1.0 出たようだ gem で取れる
早くAssetの解説記事щ(゚д゚щ)
IDEで3.1に対応するのあるんかな
Rails始めたばかりの素人です。 category has_many articlesな構成で、両テーブルに対して条件を指定して、articleを取得したいんですが、一般的にどう実装するんでしょうか? 因みに、条件に合うレコードを取得するメソッドを article モデルに追加しているんですが、やり方として正しいのでしょうか。 低レベルな質問&文章で申し訳ないのですが、アドバイス頂ければ幸いです。
>>301 includes(:articles).where('categories.xxx = ? AND articles.yyy = ?', a, b)
304 :
301 :2011/09/01(木) 17:50:52.70 ID:???
>>302 出来ました。ありがとうございます。
ちなみに、条件式にテーブル名等を文字列でガリガリ書く形になるのは仕方無いものなんですよね?
チェーンメソッドの様な指定方法ってあるのでしょうか?scopeとかでもなく。
305 :
nobodyさん :2011/09/01(木) 21:00:27.07 ID:IuUvLisM
Category.joins(:articles).where(categories: { name: 'Category 1'}, articles: { title: 'Article A'} ) あ、これだとCategory が返るのか…
306 :
nobodyさん :2011/09/01(木) 22:02:53.38 ID:IuUvLisM
belongs_to 側からjoinsを使うときは相手は単数系なのか > Article.joins(:categories) ActiveRecord::ConfigurationError: Association named 'categories' was not found; perhaps you misspelled it? > Article.joins(:category).where('name = ? AND title = ?', 'Category 1', 'Article A') Article Load (0.2ms) SELECT "articles".* FROM "articles" INNER JOIN "categories" ON "categories"."id" = "articles"."category_id" WHERE (name = 'Category 1' AND title = 'Article A') 同名カラムだったらテーブル名での修飾は避けられないかな…
307 :
nobodyさん :2011/09/01(木) 22:05:29.14 ID:IuUvLisM
ところで、eager loading目的でない(Categoryは抽出条件としてのみ 必要)場合はincludeよりjoinsを使うのがよいと思う。
国内の共用サーバーでruby1.9使えるところある?有名どころで。 rails3を使うには結局VPSしかないのかなぁ
Sprocketsの読み方ってエスピーロケッツ?
Multiple account management for Heroku
https://github.com/ddollar/heroku-accounts $ heroku accounts:add personal
Enter your Heroku credentials.
Email:
[email protected] Password: ******
Add the following to your ~/.ssh/config
Host heroku.personal
HostName heroku.com
IdentityFile /PATH/TO/PRIVATE/KEY
IdentitiesOnly yes
Heroku | Dev Center | Managing Multiple Environments for an App
http://devcenter.heroku.com/articles/multiple-environments $ heroku create --stack bamboo-mri-1.9.2 --remote staging
$ git push staging master
$ heroku rake db:migrate --remote staging
$ heroku create --stack bamboo-mri-1.9.2 --remote production
$ git push production master
$ heroku rake db:migrate --remote production
質問させて下さい サーバーが cent OS ubuntu fedora にのみ対応しています windowsで作ったrails3のファイル達を そのままlinux系のサーバーにアップロード。 そして、MySQLも同じデータベース構造を作ってあげさえすれば 問題なく動きますか?
自分はrailsなんて全くしらないが、そんなこと心配しないといけないような 開発環境しかないのかね? Javaなら普通にWindows環境で作ってLinuxサーバにうpするだけで問題ないけどね。
nginxを使いrailsアプリを動かそうとしてます。
nginxサーバーを起動後、作ったアプリ(
http://www.hoge.com/hoge/index )にアクセスしようとすると
We're sorry, but something went wrong.
We've been notified about this issue and we'll take a look at it shortly.
の500エラーが表示されます。
developmentモードだからこうなるのでしょうか?
productionモードに切り替えて立ち上がるようにするにはどうすればいいですか?
>>323 Windowsに依存したコードがなければ動く。
>>328 バックグラウンドで必要なのって
rubyとmysqlのバージョンを合わせておくくらいでいいですよね
>>323 基本的に問題ない
ごく稀にgemとかプラグインの関係でおかしくなったりするけど
>>323 Windowsで作ったRailsプロジェクトをそのまま全部linuxにアップロードしたらダメ
linux側でプロジェクトをコマンドラインから作成して、アップロードするのは「app」「public」だけにする
configディレクトリとかをアップロードしちゃうと動かなくなるはず
バージョンによって違うから何とも言えないけど
>>327 そのエラーはproduction環境のエラー文だと思うんだ
エラーがなぜ発生したのかはlog/production.logに記述されてるからそこを見てください
ちなみにdevelopmentだったらエラーの詳細がブラウザに出力されるはず
>>332 nginxを実行している状態で、
nginxのディレクトリの中にrailsというディレクトリを作りました。
その中に
rails new testapp -d mysql を実行してアプリを作成。
rails g scaffold items... を実行後、database.ymlを設定して rake db:migrate しました。
すると、MySQL側で用意していた
testapp_develoentの中にscaffoldで指定したテーブルがちゃんと作られました。
しかし、
http://hoge.com/testapp/items/ にアクセスすると先に述べたエラーが出ます。
webricksでrails sでサーバーたちあげて
http://hoge.com:3000/testapp/items/ だとエラーは出ないで動作します。
なぜでしょうか?
いずれにしてもエラーログに問題は出ていませんでした
ん?ポート(3000)の有る無しで動作が違うってこと?
>>335 ポート3000有り無しが問題なのかは分かりません。
ただし言えることは
1. webricksで起動したらアプリは問題なく開ける。
2. nginxを立ち上げ、その中にアプリを設置して、それを立ち上げると先のエラーが出る
といった具合です。
nginxのディレクトリにrailsアプリケーションを置くだけじゃrailsは動かないんだよ webrickでもpassengerでもいいけどrailsを動かすための仕組みが必要 webrickでrailsを起動させたらエラーが出ないんならそれでいいんじゃないか
nginx&passengerなどで公開するときって どの場所にRailsアプリは格納してますか? var/www/hoge.com/railsapp とか?
私の認識が正しいかどうか教えて下さい Gemfileに記述する gem 'rails', '3.1.0' gem 'mysql2' のような表記について。 bundle installを実施したときに、これらの指定された必要とされているgemが ローカルホストPCのなかに自動的に一括インストールされる。 この認識で合ってますか? ローカルホストPC(VPS CentOS5.6)にgemsやruby, mysql、各種モジュールなど入れ設定まで終えた段階で windowsでいう復元ポイントは作れますか? 後々、色々と入れてしまいゴチャゴチャにいつもなってしまいます。 クリーンである程度の必要最低限なセットが入った状態をいつでも再現できるようにしたいです。
349 :
nobodyさん :2011/09/07(水) 23:16:58.19 ID:Om/Fx6yO
ごちゃごちゃになるのが嫌なら install --path vendor/bundle と 指定すればプロジェクトの vendor/bundle 以下に入るよ。 bundlerだけをシステム全体で使用可能にしておいて、他は全部 アプリごとの vendor/bundle に入れるというのも一方法ではある。
>>349 ありがとう。
一般的なのはどちら?
システムの中にどんどんgemをインストールしていくのが一般的?
ちなみに出たばかりのrails3.1.0を使用してるんだけど
nifty generatorの rails g nifty:layout
コマンド使ってもレイアウトに変化が起きない。
views/layouts/application_html.erb
は確かに内容が変わっているみたいなんだけど
何故かな?
rails g nifty:scaffold recipe name:string index new
rake db:migrate
して
localhost:3000/recipes/new
に繋いでもデフォの素っ気ないレイアウト表示になります。
>>350 vendor/bundle 配下に突っ込むのが一般的になるだろうね
rvm + gemset で管理する人もいるだろうけど
>>344 が良さそうで試してみたんだけど、rails3.1には対応してない?のかな?
ブラウザ表示したときにスタイルシートが反映されてない。
3.1って未対応のgem多すぎ??
356 :
nobodyさん :2011/09/08(木) 22:17:23.24 ID:W+wdQIDX
1例で大杉とは大胆なご意見。
>>356 いえいえ、教えてほしいんです。
3.0で動くプラグインは3.1でも普通に動くと思っていたのですが
いかがですか?
assetsの絡むview系は全滅みたいですね。
kaminari とかガッツリ対応してるのに全滅なんて…
そんなプラグイン、初めて聞いたわ
360 :
nobodyさん :2011/09/09(金) 08:56:11.80 ID:vCkPJXt+
kaminariはpluginではなくengine gem
いまどきRailsでプラグインと言ったら、 Railsに何らかの機能を付与するものという意味だと思うぞ。 配布の形式ならpluginとgemの両方でインストールできるものもあるし。
will_pagenate も一時開発が滞ってたが、最近また活発化してるようだね Rails 3.1 にも対応してそう
railsってコロコロとバージョン変わるし 使えるプラグインが使えなくなったり、 新しいバージョンのrailsにしか対応してなかったりするのね。 どのバージョンを機軸に開発していくか悩む。 レンタルサーバーはruby1.8までしか対応してないとこがほとんどだし。
1.8.7以降なら1.9からの機能をフィードバックしているぞ。
レンタルサーバーの1.8は、大抵は1.8.5だぞ。 CentOSが多いからだと思うが。
レンタルサーバって…RailsをCGI経由で動かしたら確実に死ねるぞ heroku 使うか、AWSなりのクラウドで動かすのが吉 それなら 1.9.2 も動く
214 自分:nobodyさん[sage] 投稿日:2011/08/07(日) 08:52:16.01 ID:??? さくらvps256で40万/pv余裕だぞ $60とかアホ 215 自分:nobodyさん[sage] 投稿日:2011/08/07(日) 08:53:16.14 ID:??? 間違えた40万pv/dayな しかも1年半前の記事じゃねーか死ねヴォケ!
>>368 980円の512MBプランでどこまで快適に動かせる?
>>374 ただしPassengerはメモリ食いだから注意
>>376 PassengerはApacheの上で動くから、その質問はおかしい
(Passengerはnginx上でも動くが)
最近の流行りはunicornかな
>>363 Rails3.0は2系との互換性を保ったまま、徹底的にリファクタリングしたバージョン
Rails3.1は、2.x系との互換性を完全に切り捨てる最初のバージョン。Rails2で書かれたアプリは動くなくなる
Rails3.0には新機能はあまり入っていない。DSLが“おしゃれ”になった程度
Rails3.1には新機能がいろいろと入っている。Asset Pipelineや、CoffeeScript、HTTP Streaming、Identity Mapなど
Rails3.1で入った機能のうち、例えばIdentity Mapは極めて荒削りな状態で入っていて、「ほんとに実アプリで使うの?」という感じ。3.2になれば、使えるようになる
3.2は3.1の安定版という位置付け。3.1はコントローラ周りが遅い、Safe Buffer周りの実装がすっきりしないなどの課題がある。3.2ではパフォーマンスチューニングをガッツリやる
3.3は、出るかどうか分からない。たとえ出るとしても大きな機能は入らない
これから出るパッチは、Rails 4に入ることになる。4.0の話はもう始っている
Rails 4では、Ruby 1.9でないと動かなくなる
予言しておくと3.1は短命になる。しかし、3.1はとにかく面白いのでどんどん使うべき
3.1でjQueryが標準になった。rails-coreメーリングリストでアンケートを取ったら、すでに8割の開発者がRails3.0でjQueryを使っていた。だから3.0で間違ってprototype.jsを使っている人は、未来がないと思って、jQueryに乗り換えると良い
380 :
nobodyさん :2011/09/10(土) 01:28:10.94 ID:tmRx37YM
なんかRailsっていつ見ても「次は本気出す」ばかりだな。 開発ペースが早すぎなんじゃ無いの?
そもそも枯れる気ないだろうしな。 とはいえ開発中に最新が出てきてなおかつ移行できないとかなっちゃうとちょっとストレス。
>>383 > とはいえ開発中に最新が出てきてなおかつ移行できないとかなっちゃうとちょっとストレス。
今のペースでバージョンアップしていて、なおかつ最新バージョンで使ってみたいと思わせる機能を
盛り込んでくる、というのはある意味すごいことだよな
>>384 だから古いっつーの
いまどきRails2.2なんて誰も使わねって
2ちゃんでURL貼るならhttpはttpとかにするのがマナー それをやってないというのは、SEO的な目的なんじゃないのか? 目的のURLだけ貼るとバレバレだから、 ほかのRails関連のURLも一緒に貼ってるだけで。
389 :
nobodyさん :2011/09/10(土) 13:52:19.39 ID:tmRx37YM
そんな大層なものじゃない、単なるボット。
>2ちゃんでURL貼るならhttpはttpとかにするのがマナー はぁ? そんなルール誰が決めた? いや、誰が決めようと、それに従う理由なんて一切無い。 あんたは、常に新しいルールについていくことを求められる rails使いのためのこのスレには相応しくないね(笑 そんなルール知ったことじゃないよ(笑 むしろ、そんなルールはデメリットしかないだろ。 いちいちURLをコピペする無駄な時間が増えるだけで 何のメリットもないだろ。 まさか、2chに晒される=荒らされる とでも思っているのかい? それは勘違いだから考えを改めた方がいい。 2chで晒されて荒らされるサイトには、荒らされるだけの理由がある。 晒される場所が2chなのかどうかなんて一切関係ないのだよ。
URL貼る奴は中身について吟味しているわけではなく、単に「代わりにぐぐってやったぞ」 って程度だから嫌われる 全部自分で試せとは言わんが、せめて内容を自分で読み込んで、スレの流れに 合ってるかどうかぐらいは確認して欲しいものだ
>>390 まずは落ち着いて、ゆっくり薬を飲みなさい
関係ねーもん貼るな
>>379 詳しい解説ありがとうございます。
初心者が手を付け始めるとしたら、どのバージョンがいいですか?
三ヶ月後のサービス公開を前提として、
利用者が10万UV/dayでも問題ないサイトにしたい場合。
ケータイ(ガラケーやiPhone)でも問題なく見られるものを作りたいんだけどscaffoldしてもdestroyレコードはjavascriptですよね? 色んなケータイからも問題なく見られるサイトにしたい場合 開発のコツとかありますか? またアクセスカウントを取るときのコツってありますか? なるべく重複しないように IPアドレス 且つ cookieに残したユニークキー が違う場合のみカウントアップを行う!など。
>>396 destroyでjavascriptなんか吐かないのでは。confirmの事なのかな。
携帯はjpmobileで。スマホにはjQuery mobile。
アクセスログが取りたくて、人気サービスじゃなければ google analyticsで。
>>397 ありがとうございます。
confirmですね(確認ポップアップ)
scaffoldだと標準でjavascriptが組み込まれてるようですが、
javascriptに対応してないケータイのためにはviewのコード書き換えてあげないといけないですよね?
別件ですが、会員管理はdeviseなどを使えば簡単に出来そうですが、
例えば会員が登録したメアドを変更したい!となった場合はどうすればいいですか?
関連テーブル「profile」をシリアルIDで予め繋いでおいてって出来そうですが、
メアド変更後の確認メールをクリックして確定!の部分は完全に一から作らなきゃダメですよね?
deviseの会員登録の確認メールの機能を流用出来ればと想っていたのですが。
>>395 > 初心者が手を付け始めるとしたら、どのバージョンがいいですか?
> 三ヶ月後のサービス公開を前提として、
> 利用者が10万UV/dayでも問題ないサイトにしたい場合。
三ヶ月後のサービス公開を前提とするなら、「初心者が手をつけ始める」という
現状の方がヤバい感じがするので、まずはそこから見なおした方がいい
ソフトハウスに頼んだ方が結局安上がりなんてことにもなりかねない
>>399 すみません。仮の話としてですので
今からrubyを始めて作り込んでいくとしたら…
という前提でどのバージョンを選定すればいいか教えて下さい
>>400 何も考えずに最新使っとけ
ただし、英語で情報を集める覚悟は持っとけ
402 :
397 :2011/09/10(土) 19:40:28.39 ID:???
>>398 viewは、もちろんPC、スマホ、ガラケーで別々に作る。
jpmobileは、3.1対応まだみたいなので気を付けて。
Deviseに足りない機能は自分で作るのが普通。
個人的にはDeviseはやり過ぎで自由度低いので、Warden使って、他は全部自分で書いてる。
ただ、scaffold使おうとか考えてる時点で、Devise読んで直せるとは思えない…。
ガラケー向けは、絵文字処理や空メール登録とかするなら、Rails2系になるけど、そういう本があるのでそれ見て。ちょっと内容古いが。
>>401 何も考えずに最新を使うメリットとは?
対応プラグイン少なくない?
>>402 レスありがとうございます。
PC、スマホ、ガラケー別々のビューを用意するとのことですが、
そこらへんは一から手書きでコーディングしてます?
それとも何か便利なgemとかありますか?ケータイ用の絵文字変換ツールとか。
空メールについてはcronみたいなのを裏で30秒起きくらいに回して対応するのですか?
406 :
397 :2011/09/10(土) 20:31:04.37 ID:???
>>404 デザインは普通手書き。デザイナに頼んでる。
絵文字とかはgem無いはず。探した事ないけど。
メール関係がその程度の理解だと正直厳しい。
cronは使わない。メールサーバで受けて処理する。
確かこの辺もその携帯向けの本に書いてあった気がする。
407 :
397 :2011/09/10(土) 20:37:03.90 ID:???
>>404 ちなみに誰かが
>>405 に挙げた本がそれだけど、簡単ログインの部分はダメなので参考にしないように。
直ってるか知らないけど。
さくらVPSで nginx、PhpMyAdminを動かしたい場合ってnginxとapache同時に動かさなきゃいけない? 似たようなものを二重に動かしていいんだろうか?
409 :
nobodyさん :2011/09/10(土) 21:15:31.74 ID:tmRx37YM
nginx に php を組み込む方法もあるようだよ。 (ぐぐったらすぐ出てきた) 両方動かすなら少なくとも片方は80以外のポートを使うようにしないと。
>>409 phpといったらapacheを連想してしまいます。
しかしnginxがrails動かすなら軽いと聞いたので使いたいのですが
nginxとphpって一般的ではないのでしょうか?
ちょっと何を言いたいのか理解できないです。
さくらのVPS上で開発でもするのかな。 管理画面的なものが欲しいだけなら、scaffoldで良いから、管理画面作っちゃえば良いのに。 php入れないで済むし。 phpmyadmin狙いの攻撃も多いし。
>>412 auto_incrementのリセットやキーワード検索とかまでは
scaffoldでは設定できませんよね?
荒らしが出てきたとき皆さんはどのように対処されてますか?
phpmyadminなら一括検索して一括削除、そしてユーザー情報破棄にできます。
この前nginxでrailsが動かないと質問してた人でしょ? 正直railsアプリ以前の問題でlinuxのことをもう少し勉強しないと後々苦労すると思う PHPと違ってrailsはサーバー管理知識無いと厳しい それと、webサーバーとして最も主流で情報量が多いのはapacheです 右も左もわからない人が「速い」とか曖昧な理由でnginxに手を出しても意味無いよ 正直apacheもnginxもそんなに変わりません 相当な規模クリティカルな案件でさえもそんなに差は出ない ましてや小規模アプリじゃ差なんて無いに等しい 速いとか遅いという初心者にとって何の意味もなさないファクターに惑わされて右往左往するよりも、 web上に情報が溢れてる最もスタンダードな手法でやるべきですよ
> auto_incrementのリセットやキーワード検索とかまでは > scaffoldでは設定できませんよね? できるよ
WindowsでRoRの開発をしてみようとおもっているのですが、 raills new xxxxでつくったあとに、scriptの下にrailsしかないので、 本に書いたある通りscript/serverとかできません。。。 どうしたらいいですか?
>>413 もうそれってRailsと全然関係無い話になってるよ
OS何使ってるのか知らないけど多分CentOSだとして、
そこでまずApacheをキチンと動かす
httpd.confでバーチャルホストを自由自在に設定出来るようになる
PHPをapache上で動かせる様にする
MySQLとPHPMyAdminをインストールする
そして最後にpassengerでrailsを動かす
順序良く基本からやっていかないと厳しいぞ
管理画面作らない場合はコンソールで。 何でも出来るし。
>>416 悪いけどそんな感じに質問されても答えようがない...情報が無さ過ぎて
最初はNetBeansなどのIDE上で動かすといいんじゃないかな
バージョン6.9までならRails対応してるんで
>>403 初心者なら海のものとも山のものともしれないプラグインに安易に手を出すべきじゃない
メジャーなプラグインでメンテもされてるものなら3.1にも対応してるものが多い
となれば最新を使っておいた方が後々の学習コストが下がる
古いRailsは切り捨てられていくからな
>>416 本が古い。
rails s
でサーバ起動。
>>416 おそらく、本が古い
その本に「この本はRailsのバージョン○○を基に書いています」という記述がある
はずだから、そのバージョンとインストールしたRailsのバージョンを比べてみるといい
>>421 ありがとうございます。
無事動きました。
>>414 詳細なレスありがとうございます。
今からはApacheを使おうと思います。
>>415 scaffoldでは無理じゃないですか??
>>417 ありがとうございます。
rails sでhoge:3000 アクセスして
アプリ開発を先に学んでいこうとしてたので
当のlinuxの部分への調査を怠っていました。
順番を守って気長に学習していきたいと思います。
>>424 RailsはPHPみたいに「アプリ開発だけに専念」ってのが出来ないんですよねえ
そのへんのレンサバじゃ動かない
どうしてもRailsをまともに動かすためにOS層からの知識が必要になっちゃう
でもそのぶんPHPオンリーの人より知識が付くのが速く一年後には雲泥の差となると思います
後悔はしないと思うので頑張ってください
>>425 その辺もPassengerやらunicornやらでずいぶんとお手軽になったと思うよ
まぁ、PHPほどのお手軽さはないけどな
>>425 ありがとうございます。
本当そうですよね。
今までVPSを使って一から構築!なんて考えてませんでしたorz
やはり気になるのがセキュリティー部分です。素人なりにどこに気をつけて!ってポイントが分かるといいのですが。。
とりあえず今のところ
Ruby
rails、各種プラグイン
passenger(nginx)
MySQL
Webadmin
をキーワードに構築してきました。
今後は
Ruby
Rails、各種プラグイン
LAMP
Webadmin
といったとこでしょうか?
webadminやLAMPからapacheの操作や、phpmyadminを操作したいのですがいかがでしょう?
セキュリティー的にこれだけは気をつけとけ!とか
これも便利だから一緒に入れとけ!
とかってありますか?
nginxがapacheと同じ位置づけなのは分かるのですが passengerがどの部分の役割を担っているかが分かりません。 nginxサーバーやapacheサーバーで ruby(on rails)を動かすための中間的なプラグインみたいなもの って認識であってますか?
特に大量アクセス前提のWebアプリ開発に関しては 「プログラミングだけできます」という人間は必要ない。 OSやアプリケーションサーバの構築まで出来る人間じゃないと通用しない。 PHP関連スレとRails関連スレの違いはここ。 PHP厨は向上心が全く感じられない。 おそらく、PHPを好む人間とRailsを好む人間では 遺伝子レベルで違いがあるんだと思う。
そういう発言、先生ちょっと感心しないな
>>429 ただただ他人を見下したいがために
声をあげる人間もよほど遺伝子的欠陥が…(ry
432 :
nobodyさん :2011/09/11(日) 00:45:31.38 ID:P0ZI8J7v
Rails3を使っています。 I18n.load_path = "#{Rails.root}/config/locales/ja.yml" のように特定のロケールファイルのみを指定しても I18n.t('hoge')と翻訳メッセージを使うと、 localesディレクトリ以下のファイルを全て参照できてしまいます。 特定のロケールファイルのみしか認識できないようにする術は無いでしょうか?
VPS上のMySQLにODBCを使って外部から直接IP叩いてアクセスが出来るようにしようと考えています。 セキュリティ上止めておいたほうがいいですか?
ほかのロケールファイルをすべて削除すればいいじゃん
>>429 そりゃ違うっしょ
だいたい大規模プロジェクトの場合アプリ層と鯖管理は別の人間がやるのが当たり前なんだし
全部一人でやってるプロジェクトなんて小規模すぎるし、ましてや全部一人でやってるから俺様偉いみたいな思考は意味不明
もう使ってる言語で優劣付けるようなくだらない風潮は過ぎたよ
>>428 >ruby(on rails)を動かすための中間的なプラグインみたいなもの
うん、そんな認識でいいと思うよ
passengerが登場するまでは相当面倒だったんだよRailsを動かすの
俺はそれまでMongrelってのをapache上で使ってたんだが、いちいちプロセスの管理したりしないといけないから面倒だった
・一つのRailsアプリに一つのプロセスを割り当てる
・そのプロセスが落ちたらアプリも死ぬのでプロセスを監視して落ちてたら再起動する仕組み(monitとかGod)を導入
・一つのプロセスだと大量にアクセスが来たら対応できないので、いくつかの複数のプロセスを予め用意
・プロセス増やすごとにサーバーのメモリを使うんだけど、あんまりアクセスが無い時でも複数のプロセスを起動させたままなのでメモリの無駄
てな具合に個人で管理するアプリにしては面倒極まりなかった だからあんまり気軽にRailsアプリ作れなかったんだよ
当時はVPSも高かったしね
そこにPassengerが登場して、お手軽にRailsアプリを動かせるようになったってわけ
・Railsアプリをアップロードしてやれば(ほぼ)動くようになる
・プロセスはpassngerが管理するので俺らは考えなくてよい
・アクセスが大量に来たときはプロセスをpassengerが勝手に増やしてくれる
・逆にアクセス少ない時はプロセスを減らしてくれる これでメモリリソースを有効に使える
と良い事だらけなのですよ
さらにPassengerのインストーラーの手軽さときめ細やかさは俺が今までに見た中でも最も優秀な部類に入るし、あの会社は皆若いのに凄いと思う
>>436 概ね同意だが、PHPerに救いようのないレベルのプログラマが屯しているのは事実だと思うな
PHPが悪いんじゃなく、PHPの敷居の低さがそういうプログラマを誘い込んでしまって、そういう
輩が目立ってしまうってところだろうな
もっとも、俺はPHPは嫌いだし、CakePHPも嫌ってる
特に、CakePHPは、PHP使いには我慢できるんだろうが、俺には無理
・DSLっぽい書き方ができないのでやたら冗長(array地獄)
・Modelが配列中心なのでクラスに分ける意味が見出せない
・もうPHP4は捨てたらいいのに
てとこが理由
>>437 ありがとうございます。
結局サーバーを初期化して一から下記のようにしました。
@Remiレポジトリ追加
AApache
BWebmin
CPHP
DMySQL
EPhpMyAdmin
FRuby
Ggem Rails
Hgem sqlite3←ここまで順調。phpmyadminもwebで繋いで表示できました
Igem mysql2←ここでエラーで引っかかったorz
Iまで来た時にmysql.hがないとのことでmysql2 gemインストール時にエラー発生。
調べたところmysqlのdev版を入れたらokとのこと。
しかし、それをwgetのソースから入れようとしたらconflictエラー発生。
remiレポジトリからも上手く入れられず
mysql.hの問題が解決出来ずに今日が終わりました。。
デプロイって難しいですね。
環境を用意するも時間がかかりすぎますね(T_T)
Hくらいまでの段階でサーバーをバックアップ出来ればいいんですけどね。
Hの後に色々試してゴミファイルがどこそこに散らばったりインストールされちゃったので。。。
440 :
nobodyさん :2011/09/11(日) 08:16:30.12 ID:2IeLQIHa
devってのは、 「mysqlのdev版」(=ベータとかRCとか)じゃなくて 「mysqlに関連したプログラムのコンパイルに必要なもの」
>>440 すみません。詳しく教えてもらえませんか?
446 :
nobodyさん :2011/09/11(日) 15:39:15.16 ID:b5VayDzx
最初rails扱ったときのmongoidを使っていたのですが、 activerecordでmodelの継承できないのですが? 単一テーブル継承というものは見つけたのですが、 一つのテーブルにuserとgroupのようなものが一緒に 入れても問題ないでしょうか。
>>439 >調べたところmysqlのdev版を入れたらokとのこと。
はyum install mysql-develじゃダメなの?
あとなんでMySQL入れてるのにSQLiteもgemで入れようとしてるのか謎 DBはMySQLでいくんだよね? SQLiteは関係無い
Railsアプリ作る時は rails new *** -d mysql って作らないとMySQL用にdatabase.ymlが作られないよ
gem install mysql2がどうしても上手く行かない場合はgem install mysqlで妥協する
config/database.ymlのadaptarをmysql2->mysqlに変える事
数日前から書き込み見てるけど、webや書籍の色んな所に散らばった情報を断片的に使ってるんで辻褄が合わなくなってるんだと思うよ
あと、いい加減スレチになっちゃうのでできればサーバー構築の中でもRailsで関係ある所だけ質問した方がいいかも
さくらVPSは何度でもOSリセットできるんだから、失敗したらやり直す 10回でも100回でもやり直す それで技術がついてきます
もし途中までの状態をバックアップで取っておきたいならアメリカのLinodeってVPSを使う
ここは途中までの状態を保存してcloneとして別のサーバーにコピーできるから 一番最低のプランを二つ借りればおk
1週間で止めれば一週間分のお金しかかからないはず(ただしアカウントにキャッシュバックされると思う)
>>447 お詳しくありがとうございます。
まさにその通り断片的に掻い摘んでサーバー環境を組もうとしているので干渉が起きたりしています。
railsに関する部分以外での質問
すみませんでした。
>>448 断片的にかいつまんでやることが悪いこととは言わない
習うより慣れろ、という言葉もあるぐらいだし、実践して詰まって調べて解決して、ってサイクルが
理解を早めるからね
でもあなたの場合、見てる限り「調べて」の部分が薄すぎる
それじゃ、自分のためにもならないよ
>>450 ありがとうございます。今は30個の分からないことがあるとしたら29個は徹底的に調べて
自分で解決して残りの1個をお伺いさせていただきました。
今後はそれが100個あったら1個しか聞かなくても良くなるくらい精進します。
じゃあとりあえず残りの29書いてみようか
30個の分からないことが"あるとしたら"
Rails2.0.2って…いつの話だよ
SEOボットにいちいち反応するなよ
SEOじゃないと思うよ。 個人の古いブログとかgithubなんかにアクセス来ても嬉しくない。 というのも、うちのブログの古い記事も何回か勝手に貼られてたから。 広告出すつもりないので、PVあっても何もならんし。 PV自体も、一回の張り付けで5PVもあるかどうか。 2ch経由で来た事が分かる以外何も無し。
ターゲットのページ以外どうでもいいんだろ どうでもいいから、どうでもいい古い記事が、どうでもいいタイミングで貼られる
>>446 mongoidはActiveRecordではない。
MongoDB使ってるならmongoidで、MySQLなりのRDBMS使ってるならActiveRecord使うけど、DBには何を使ってるの?
で、ActiveRecordの単一テーブル継承は、オブジェクト指向における継承。
つまりuserとgroupが親子関係あるいは共通の親クラスを持つサブクラスとなるわけだけど、クラス設計としてそれが適切なら使えばいいし、そうでないなら使わない。
Apache MySQL PHP(php-mysql) phpMyAdmin sqlite3 Ruby1.9 rails3.1 gem-mysql2 これらが干渉せずに問題なく動くよう CentOS5.6に入れたいと思います。 しかし何度試しても必ずどこかで引っかかります(特にphpMyAdminの部分) 初期状態のCentOS5.6をお持ちの方で上の条件をクリア出来る方いたら 手順を書いていただけませんか? こちらでも試してみて、それらが問題なく動くようであればpaypal経由で少ないかもしれませんが3000円を差し上げます。 お時間ある方で試してもいいよ!という方いましたら よろしくお願いします。
もうやめなよ。完全にスレチだ 素直にソフトハウスに頼んだ方がいい 3000円より高くつくだろうが、そっちの方が早道だ
明らかに同じ人ですな 今までレンサバでPHPの人が、構築コミで請けちゃったのかね。 この感じだとローカルにも環境作れなそうだから、開発もできないんじゃないかな
>>387 2.5使ってる
大規模なサービスなんでいちいち3にする必要性がない
ちっぽけな小規模なサービスなら別だけどね
なんて閉鎖的な連中だ Railsシルバーの俺が何でも答えてやる
ログもないのに調べられるわけないじゃんw ほとんど依存性のエラーだろ。
>>460 説明不足ですいません
はじめてRailsに触れたときににmongoidでいじっていて、
これじゃまずいと思ってMySQLに移行し、
現在ActiveRecord使っているという状況です。
オブジェクト指向のデザインパターンかなんかで、
コンポジットパターンというものをみつけて、
これなら自分の考えているものができると思ったのですが、
Railsでも問題なく利用できるのかと思い質問しました。
>>461 そういうのは2chでやるもんじゃないよ...数日前から見てるけどちょっとガッカリした
はてな辺りで3000ポイント使って質問したら手取り足取り教えてくれるんじゃない
Ruby寄りの質問ですがお願いします ActiveRecordでMySQLのデータを取って来ています MySQL側のNULLをRubyではてっきりnilにしてくれると思ってたのですが、なんと"NULL"という文字列でした これ何とかなりませんかね? 真偽判定する時に if data == "NULL" なんてのはちょっと不細工かなあと できれば if data.blank? とやりたいのです
474 :
472 :2011/09/12(月) 16:34:08.09 ID:???
すいません自己解決しました MySQLのデータをCSVでインポート、エクスポートしているうちにNULLが「文字列のNULL」として入っていたようですorz NULLデータをRubyで取得した場合はきちんとnilとなっていることを確認しました お騒がせしてすみません
>>473 それマジで言ってるならヤバイ発想だぞw
>>455 このあと、Todoにhoge:stringを追加したい場合どうしたらいいの?
$ ruby script\generate scaffold Todo title:string body:text done:boolean due:datetime hoge:string
$ rake db:migrate
じゃ何もしてくれませんでした。
scaffold に頼るな 1. migration ファイルを作ってカラムを追加 2. rake db:migrate 3. view に該当カラムに関する部分を追加
つーか本買って本腰入れて基礎からやりなよ webで情報掻い摘んでわかんなくなったら2chに丸投げって しかも投げ方も下手だし 適当な質問の仕方で答えようがない
scaffoldって意味あるの?
482 :
nobodyさん :2011/09/12(月) 21:25:55.57 ID:Gurg900f
>>464 rails 2.5 なんていつ出たの?
まだNULLという文字列で取得してくれるならマシってもんよ。 Doctrineなんて、leftjoinで等価結合にならなかった(nullになった)カラムは 勝手に切り捨てられることがあるんだぞ。 贅沢いいすぎ。
>>481 「○分でできるWebアプリケーション!」の宣伝用
まぁ、コントローラとビューのサンプルとしては役にたってるけど
scaffoldは自分で何でもできる人が楽するためのもんであって、技術が無いからscaffoldってのは順序が逆 あれは初心者が手を出すと余計に時間がかかる
486 :
472 :2011/09/12(月) 23:16:51.71 ID:???
>>483 いや違うんです
474でも書いたように自分の不手際でNULLという「文字列」が入ったデータだったんです
本来のNULLはきちんとnilになってました
つまりActiveRecordは何も悪くなくて自分の勘違いだったんです
488 :
nobodyさん :2011/09/13(火) 01:21:27.32 ID:pMpaI0Dv
Railsを仕事で使っている方々にお聞きしたいです。 ActiveRecordとDataMapperでは、現在どちらの方がよく使用されますか? やはり後発のDataMapperのほうが将来性があったりするんでしょうか。
493 :
472 :2011/09/13(火) 18:31:46.48 ID:???
>>488 DataMapperなんて使ってるのは物好きだけです
Rails標準のActiveRecord一択
494 :
nobodyさん :2011/09/13(火) 20:40:01.59 ID:HzAkYxNv
>>446 >>469 ですが
例えばタイムテーブルを作成するプログラムがあってtimetableはtimetable_itemをhas_manyしている。timetableが編集された場合、その履歴を保存しておきたいので、timetableを継承したtimetable_historyを作成したいこの場合、単一テーブル継承を利用するのは適切か?
また、timetable_itemを削除する場合、
@timetable_item = TimetableItem.find(params[:timetable_item_id])
@timetable_item.delete
でもいいのか
@timetable.timetable_items.delete(params[:timetable_item_id])
を使った方が良いのか、使わなければならないのか、
そもそもどう違うのか
分からなかったので質問させて下さい
495 :
nobodyさん :2011/09/13(火) 21:13:26.90 ID:pMpaI0Dv
>>493 パフォーマンスが悪くなりがちなActiveRecordよりDataMapperの方が
ずっと高速という情報を見たのですが(1年以上前の記事だったので
アレですが)、現在のバージョンではそうでもないんですか?
>>495 3になって相当高速化してるはずだよ特にArelで
でもそういう違いなんて自分で計測出来ない人にとっては無用の差だったりします
環境とか使い方で全然変わってきますしね
計測出来ない人ほど曖昧な情報に右往左往しちゃいがち
エンジニア界には「推測するな計測せよって」とい格言がある
いずれにせよ今後も安定して開発が進むActiveRecordを推奨しますです
railsってセキュリティーホールとか 穴とかあるの?特に3.1とか。 クロスサイトスクリプティングとかは大丈夫なん?
おまえ営業とかの素人だろ
結論しか興味のないところとか、どんぴしゃか
>>500 ない。
推奨された標準的な書き方に
セキュリティホールが生まれないような対策が施されている。
もちろん、意識して破ることも出来る。
506 :
nobodyさん :2011/09/15(木) 00:42:30.21 ID:Ny3msoY2
>>493 >>498 ありがとう。
勉強がてらちょっとしたものを作ろうと思ってたんだけど
どっち使うか迷ってたんですが、ActiveRecordでいきます。
でも確かに時間作って自分で両方比べてみるべきと言えばそうですね。
書籍にしてもwebにしても、AcriveRecordを使ってること前提で書かれている情報がほとんどなので、 もしDataMapperを使うとトラブった時に頭を抱える事になりがち Railsに限らないですが初心者はなるべくスタンダードで王道なやり方を進むべきです その方が壁にぶつかった時にwebに情報が多いので DataMapperの情報って相当少ないですからね
DataMapperよりMongoidの方が使われてると思う
すみません。Herokuについて質問なんですが、 Herokuの標準DBのPostgreSQLなんですが、どうしてWeb上でフロントエンドが用意されていないんでしょう? Web上でテーブルのデータを見たり、データをいじくったりとか、需要はあると思うんですが……。 代替方法とかあるんでしょうか? それともheroku db:pullとかheroku db:pushで頑張れってことなんでしょうか?
Herokuに聞けとしか答えようがありませんね
phpmyadminを利用してる人ってApache使ってますか? nginxを使ってるから このままがいいんだけど nginx + passenger + fastcgi = rails +phpmyadmin って形で運用してる人いますか?
今までの流れからして、phpmyadminがらみの質問する奴に答える人間はいないと
思われる
>>461 と同類と思われるからな
同類っていうか同一人物だろ みんな色々アドバイスしてるのに全く聞く耳持たずに未だにnginxだし 初心者で知識も技術も無いのにわざわざマイナーな環境に手を出してドツボにハマって質問連発ってどうなの 王道で行けって何度も言われてるじゃん つーかRails関係無さすぎていい加減腹立ってきた
Webで聞きかじった知識で「nginxの方が速いからこれ!」って思い込んじゃったのかな 実際のところその差がはっきりわかるぐらいの負荷がかかるサービスなんて、世の中に そんなにないのにな
質問させてください。 rake db:migrate のことなんですが あらかじめ database.yml に記述しているデータベースを用意しておけば問題なくコマンド通りに実施されます。 しかし、データベースがない場合はエラーになります。 こういうものですか?rakeコマンドはデータベース作成から行ってくれるものだとばかり思いこんでいました。
rakeコマンドはDBと何も関係ない。 db:migrate がDB作ってくれるのは sqliteだけでは。 権限にもよるけど db:create する。
deviseを使いたいがために3.1使ってるんだけど 3.1に対応してるgemが少なすぎない? どれくらいかけて、このバージョンに対応していくんだろう。 twitter-bootstrap-rails web-app-themeなどを使いたいのに みんなは対応gemとかどこで確認してる?
520 :
nobodyさん :2011/09/16(金) 20:46:41.99 ID:8guCyTTF
gem install gemname --preで正式リリース前の対応版が入るかもしれないね。 とりあえず、githubの該当gemのとこ見ると開発状況は伺える。
>>519 ヒント
Windows Me
Windows Vista
>>519 対応してないやつは自分で直しちゃう事が多いかも。
deviseみたいにあれこれやってると嫌だけど
525 :
nobodyさん :2011/09/17(土) 11:44:30.99 ID:89WHHj3k
Cent環境からScientificLinux環境へ移動しようとRails環境を構築していました RailsをMongrelで動かすところまではうまくいくのですが そこからPassengerでApacheかnginxと繋ぐところがうまく行きません 何方か ScientificLinux + Ruby1.9系 + Rails3系 で稼働に成功した方はいらっしゃいませんか? 私の場合は rvmをrootでインストール ruby1.9.2をインストール gem install rails実行 までは上手くいくのですが、そこで失敗します 諦めて、rvmではなくソースからmake使用としたのですが checkinstallでrpm化に失敗して止まっています
> rvmをrootでインストール > ruby1.9.2をインストール > gem install rails実行 > までは上手くいくのですが、そこで失敗します そこまで上手くいって「そこで失敗って」、どこで失敗したんだよw
530 :
nobodyさん :2011/09/17(土) 15:18:29.09 ID:EqR+aLgF
だいたい、mongrelで動かしているものに対してpassengerが出る幕があるのか?
皆はバージョン何つかってる? 3.1だと対応しているプラグインが少ないけど gemはあまり使ってない?
そもそもプラグインにベッタリな開発はしてないから、ふつうに3.1
>>532 凝ったレイアウト作るのとかって結構しんどいじゃん?
プラグイン使うと楽々一発なんよね
レイアウトなんてどうせカスタマイズ入るんだから、プラグイン使うとそのプラグインに 振り回されて余計面倒だから使わない acts_as_? 系は使うこともあるな
railsはどうなのか知らんけど、他のフレームワークではデザイン系のプラグインにべったりな 開発手法は失敗することが多い気がする。 たとえば、ガラケーオンリーでhtmlのソースは見られることはないだろうという前提のサイト。 今のご時世、どうせ、「スマートフォン対応してよ」という要望が出てくるでしょ? その時に、ガラケーアクセス前提でデザイン系プラグイン使いまくりのサイトの場合は スマートフォン対応がカオス化するわけよ。 いきなり、デザイン系プラグイン使いまくり携帯サイトをスマートフォン対応に出来ますか??? 無理でしょう? いろんな意味で。 テンプレートのデザイン変更の工数や、セキュリティ対応など、、、、プロジェクトは炎上化することは想定の範囲内です。 自分が言っている内容が理解できない低知能な人は、自分の書き込みは無視してください。 時間の無駄ですからね。 自分の書き込みを見て、危機感を感じない人は、エンジニアとして全く素養が無い人間ですから(笑
>>535 お前、自分が馬鹿だって自覚ある?
>>535 が馬鹿だって見抜けない人は
エンジニア失格。
ガラケーのデザイン系プラグイン使いまくり携帯サイトの
「デザイン系プラグイン」ってなんのことなんだろうねw
たぶん
>>535 は知らない。だから答えられないだろうね。
つーかさ、
>>531 のように「3.1は対応プラグインが少ない」って定期的に見かけるし
多分同一人物だろうけど、何が目的なんだろうね?
Railsのネガキャンやってるわけでもなさそうだし
>>538 普通のことを当たり前に言ってるだけだろ。
お前アスペルガーじゃない?
deviseってdestroy 即ちjavascriptでしかログアウトできなくね? 無効にされてたら使い物にならなくね?
>>531 のべたべたした感じは、
ここにURLを投稿してるやつと同じ精神的未熟さを感じる。
>>539 メジャーなプラグインは3.0->3.1の変更点に関係ないか、3.1に対応してるか
どっちかだぞ
全然当たり前のことじゃない
「うまくいきません」 「失敗します」 こんな質問で誰がどう答えられるって言うんだ 最近しょっちゅう来てるPassenger君はもっと質問の仕方工夫しろよ 頭悪そうに見えるぞ
というか3.1ってまだリリースされてないような。
されてないじゃなくて、されて間もないだった。 すぐ3.2なり4.0が出て3.1は短命になりそうという状況だから、 様子見のplugin作者もいるんじゃないかね。
>>545 具体的に様子見になってるプラグインをあげてみてくれ
>>519 twitter bootstrapは別にgemじゃなくて良いだろ
gemも別に何もしてないんだし
>>551 gemにしてるのは3.1のasset pipeline使うためだけだから。
中身は何もしてない。
本家 twitter bootstrap の css,less が入ってる程度。
だから、3.0以前だったら普通に本家 twitter bootstrap落としてきて publicの下に入れれば良い。
gem で less は入れる必要あるけど。
>>552 要するに3.1の場合は
githubからDLしたcssを
assetに入れて、それを呼び出すだけでいいってこと?
さくらインターネットでサーバー借りてRailsインストールしようと今日一日頑張ったけど 難度やっても失敗するからRailsは諦める。FUCK
さようなら。そして二度と来ないでください
なんだと!?じゃあ居座る!!
そーいや、俺も最近さくらに3系の環境構築しようとして失敗したわ。そこで萎えて半月ばかり放置してた。 けど、rake,gem,rvm。環境の土台がここまで信頼できない言語もめずらしい。 レールに乗れたときの効率は確かに素晴らしいんだけどねぇ。
いやPassengerとか使えばそれこそ鼻糞ほじりながら5分で全部仕上がるけど...
俺みたいに始めて3日のカスでも出来るというのに(笑)
>>553 ちゅーかむしろ twitter-bootstrap-rails は3.1にしか対応してない。
cssは別にダウンロードして入れなくても、リンク張るだけで良いし。
ダウンロードする場合、less入れるのが嫌ならMakefile入ってるからmakeすれば良い。
563 :
nobodyさん :2011/09/18(日) 23:16:06.56 ID:4qQGngee
リモートサーバにわざわざrvm使って入れる意味がわからん。
>>563 用途にもよるけど、デモ用やテスト用サーバとして使い回す場合だと、rvmのが良いよ
結局、3.1に対応してるプラグインが少ないって叫んでる奴って、web app themes を 使いたいだけじゃないのか?
>>566 正解だと思うな
「俺の使ってるプラグインが3.1に対応してない」→「3.1に対応しているプラグインが少ない」という
短絡思考の人間が騒いでるだけ、というところだろう
>>562 リンク張っても、いつかのタイミングで削除されることない?
それならソースを自前サーバーの中にいれておきたい。
あれの仕組みが良く分からない。
普通はcssファイル一つ入れとけば良くない?
>>568 htmlが分からないってことなのか。それは勉強して。
ホットリンクはgithubを参照してるみたいだし、バージョン毎にパスが違うので、ちょっと試すなら良いのでは。
less使うのはカスタマイズする場合なので、そのまま使いたければ中のcssを1個置いとけば良いだけ。
>>569 ありがとう。
認識としてはrailsフォルダの
asset>stylesheetの中にbootstrapのcssファイル一つポンと置いておけば、それだけでいいってことだよね?
>>570 どうして全部聞こうとするの?
3.1のドキュメントはその辺にあるんだし、仮にファイル1個置くだけなら試してみればええやん
そんなのも人に聞かないとできないの?
scaffoldしたときのレコードdestroyについてですがjavascriptを無効にしたらレコードが削除されません。 javascriptが無効になっていても削除させる方法はありますか?
>>572 bootstrapのcss読み込ませてないだけ。
それくらいはドキュメント読めよ…
httpメソッドがdeleteのものを使う場合って javascriptが必ずONになっていないと変な動きをしますよね? 皆さんは必ずjavascriptがON前提のサイト造りにしてます?
>>576 ありがとうございます。
分かりやすいですが、
要するにJavascriptがオンじゃないとレコードの削除すら出来ないということですか?
具体的に言うと <%= link_to 'Destroy', todo, confirm: 'Are you sure?', method: delete %> だと、javascriptをオフにしていたら 確認ダイアログが表示されず ただ todo/1 に飛んでしまい レコード1は削除されません。
>>577 君、こないだから「携帯はjavascript使えないので〜」とか言ってた人でしょ。
もう無理だから、ベンダーに頼みなよ。
PC向けはjs前提で作るのが普通。
動作環境にjs入れてねって書くだけだし。
携帯向けはjs無しで作るのが普通。
ブラウザの理解するhttpに destroyメソッドは無いので、railsでは擬似的に実装されてる。
js無しでdestroy呼ぶ方法は
rails destroy without javascript
とでもググればいろいろ出てくるはず
質問です。 Railsを使ってアクセスユーザを出来る限りユニークで1人につき1カウントづつ取りたい場合、どういった工夫がありますか? 例えば アクセス毎にIPアドレスをリストに追加していく。 且つクッキーを埋め込む。 二回目以降のアクセスで IPアドレスが重複している。 又はクッキーにデータが存在する。 いずれかであった場合はカウントアップさせない。 Railsを使った場合はこういう手法が一番マシな方法になりますか?
俺はむしろ本番機の構築にもrvm使うのは積極的にアリだと思う。 細かいバージョン指定するのも楽だし、ビルドするからバイナリ入れるよりパフォーマンスも期待できるし、gemset複数用意できるし。
>>580 基本的にはありません。
1人1アカウントまでと利用規約に書く。
cookieは消せる。
IPは自宅のネットでも変わるし、自宅で複数の人が使ってればみんな同じIPになる。会社から登録したら会社のIPになるし。
どうしてもというなら、ユーザ登録を郵送処理に変える。住所入れてもらって、そこにパスコードを目隠しで入れたハガキを郵送。このコードをサイトに入力で登録完了。それまでは仮ユーザ登録。仮ユーザは機能制限して2週間くらいで失効。
もちろん登録の時にメールアドレスも入れさせるけど、無料メールをはじく。
ハガキ使った登録は一度だけやった事あるけど金かかるしおすすめしない。
利用規約に書いて、あとは良心を信じるしかない。
>>580 あ、カウンターの話か。
素直にgoogle analytics使って。
今時内部でカウントアップとかしないから。
>>580 >>396 か。ずっと張り付いてるのな
他の人が書いてたけど、はてなでポイント付きでやれよ
おまいら、RSpec の記述は日本語派?英語派?
質問です。 現在、「Ruby on Rails3アプリケーションプログラミング」という本で勉強中です。 9.4.6章で「Ajax対応のフォームを生成する」という部分で、formのボタンを押すと非同期通信を行い、 ページ下部に結果を反映させるということをやります。 やり方としてはform_tag/form_forメソッドに:remoteオプションを付与するというやり方です。 そこで疑問があるのですが、 formボタンを押した時点とあわせ、このページを開いた時点でも非同期通信をおこない、 最初からページに結果を表示させたい場合はどのようなやり方をしたら良いですか?
>>586 そういうJavaScriptを書く。
formはdivか何かで囲んで、内容をajaxでsubmitするようなやつ
>>583 サイト上にアクセス数表示するんだけどanalyticsで可能なの?
>>587 ありがとう。
なんとなく分かりました。もう少し頑張ってみます。
>>588 そんな時代錯誤な…
重くなるからやめたら?
キャッシュも効かなくなるし
大体カウンターが表示されて何が嬉しいのか
>>590 analyticsでやるならキャッシュもクソもねえだろ
>>591 いやいや
>>588 はサイトにカウンタの数を表示すると言ってるのよ。はてなのカウンタみたいに。
analyticsじゃ無料だろ
analyticsの管理画面じゃなくて、自分のとこのサイト
apiでデータ取ればいいじゃん
595 :
nobodyさん :2011/09/20(火) 00:27:27.50 ID:f3rxjnO0
resourcesによるルート定義について質問させてください(rails3.x) #routes.rb resources :login, :only => [ :index, :create ] #rake routes login_index GET /login(.:format) {:controller=>"login", :action=>"index"} *********** POST /login(.:format) {:controller=>"login", :action=>"create"} /loginに対してPOSTしたときに認証を実行しますが、アクション名がcreateなのが気になります。 createのアクション名をどのようにして変更できますか?
599 :
595 :2011/09/20(火) 03:08:42.20 ID:???
601 :
nobodyさん :2011/09/20(火) 09:04:03.73 ID:szjJAFY8
>>595 resources はいくつかのREST的ルーティングルールをまとめて作成する
マクロのようなものなので、とっぱらって、
match 'login' => 'login#roguin', via: 'post'
のようにすれば好き放題。
603 :
595 :2011/09/20(火) 19:18:47.46 ID:???
>>601 ありがとうございます!
matchではHTTPメソッドを指定する方法がわからず(viaオプション)
あきらめかけてたのですが、すっきりしました。
604 :
nobodyさん :2011/09/20(火) 20:21:46.90 ID:ZhTi3raq
614 :
nobodyさん :2011/09/21(水) 22:06:12.22 ID:PGhv4em5
RailsによるアジャイルWebアプリケーション開発 という本で勉強中のものです。 オンラインブックストアを作りながら覚えるというものなんですが「カートに追加」というボタンを作り、それをクリックすることでページを更新することなく、Ajaxによってページに新しい情報を反映させたいんです。 <やったこと> ・indexファイル内にform_tagでボタンを作り、add_to_cartというアクション(コントローラーに定義したものです)を指定したところ、きちんとアクションは動作しています ・add_to_cart.rjsというファイルを作り、page.replace_htmlでページに情報を反映させるようにしました。 ・layoutのファイルのヘッドタグには、javascript_include_tag :defaultsと記述して、ライブラリを読み込んでいます。 しかし、「カートに追加する」ボタンを押した後に表示される画面が、<html>などのhtmlタグが見えてしまっている状態で、ウェブページのXMLデータを取得したときのような画面になってしまいます。 これはrjsにレイアウトが反映されてないということなのでしょうか? 本書で説明されているrailsのバージョンが古いので、苦戦しています。
615 :
nobodyさん :2011/09/21(水) 22:09:54.12 ID:OtxeDDGs
rjsはどっかのバージョンで標準から外れたはず。(3だっけ?) 古い本でやるなら古いRails環境を作ってやるべきじゃないかな。 gem install rails -v 2.0.0 とかさ。
おまえが使ってるRubyやRailsのバージョンも、 本のバージョン(第3版まである)もわからないんだから、 他人がそんなことわかるわけないだろ。 この手の常識っていつまでたっても確立されないな
617 :
nobodyさん :2011/09/21(水) 22:36:56.77 ID:PGhv4em5
>>615 rjsは標準ではなくなったんですね。ありがとうございます。
いずれにしても最初からやり直してみたい思っていたので、次は古い環境に合わせてやってみます。
>>616 すいません、確かにバージョンの違いで悩んでいるのにバージョンを記さないのは変な話でした。
ruby:1.8.7
rails:3.0.10
本のバージョン:第2版
Rails3.0とか第3版でも若干つらいのに、 第2版とか残念ながら説明不能の領域
2版ってrails1.2.6の時代じゃなかったっけ
620 :
nobodyさん :2011/09/21(水) 23:34:15.37 ID:OtxeDDGs
3.1を勉強中なんだが画像やCSSファイルがassetディレクトリに変わってますよね もし画像に直リンクした時でも全部Railsを通すって事なのかな? パフォーマンス的にどうなんだろう
623 :
nobodyさん :2011/09/22(木) 07:46:32.20 ID:LX3zAsbd
>>618 そうですよね、考えていただいてありがとうございました。
本を片手に勉強するときは本で使われているrailsのバージョンに合わせ、自分でアプリを作るときにはrails3について調べながらやってみようと思います。
>>623 正直、他の本使った方が良いと思う。
余程の事がなければ1.2系を使う事はないだろうし。
その本を読むなら、あまり熱心にコードは組まずに考え方とか概要だけさらっと読むのがいいかも。
基本を理解するには良い。
3系で初心者におすすめできそうな本は、本屋でちょっと見た感じだと
「Ruby on RailsによるWebアプリケーション・スーパーサンプル改訂版」
かな。rspecでテストも書いてるし。
あと定番の
「Rails3レシピブック」
こちらはリファレンス的に。
初心者は、少し分かってからだと役に立つと思う。
他はWebで調べるのが良さげ。
古い情報多いから、そこは検索工夫して。
625 :
nobodyさん :2011/09/23(金) 01:07:40.70 ID:vVcz6FXa
>>623 Ruby on Rails 3 アプリケーションプログラミング
が分かりやすい。
626 :
nobodyさん :2011/09/23(金) 07:54:38.59 ID:HGtDdDb6
>>626 英語でも良いなら(日本語訳もサイト上にある)、
asciicasts.com
とかも良いよ。
初心者向けとは言えないかも知れないけど、少し分かったら楽しく読めるはず。
初心者の質問です。 Viewでurl_fieldを指定した場合、url形式ではない文字列が入力された場合に クライアント側でエラーチェックがかかりますよね。 それと同じようにクライアント側で必須チェックも同時にやりたいんですが、 どのようにすれば実現できますか?
629 :
nobodyさん :2011/09/24(土) 10:27:14.38 ID:6AyX50Ec
required: true (:required => true) オプションを付ける。 どっちかというとHTML5の質問だと思う。
>>629 できました。有難うございました。マジ感謝です。
なるほど。これはHTML5関係なんですね。
便利ですね。
model validateが動かなくて今日の午後が潰れた。 原因はvalidateじゃなく、validatesだった。sが抜けてた。泣いた。
と、思ったらまだ動いていなかった・・・
と、思ったら動いてた 少し休もう
635 :
nobodyさん :2011/09/24(土) 21:38:19.99 ID:zBp5Lw5x
ARのincludesとjoinsの動作がよくわからず、質問させてください。 rails consoleで u = User.includes(:authentications).where('id = 1') のようにしますと、 => [#<User id: 1, gender: nil, email: "", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 4, current_sign_in_at: "2011-08-28 09:48:13", last_sign_in_at: "2011-06-21 13:53:24", current_sign_in_ip: "192.168.0.3", last_sign_in_ip: "192.168.0.5", created_at: "2011-06-20 10:50:38", updated_at: "2011-08-28 09:48:13">]
636 :
635 :2011/09/24(土) 21:40:27.99 ID:zBp5Lw5x
と返ってきたのですが、この中にはauthenticationsに関するデータは見当たりません。 authenticationsのデータはどこに格納されているのでしょうか? u.to_jsonのようにしてみても、Userモデルの情報しか表示されません。 教えていただけますと幸いです。
u.authentications
638 :
635 :2011/09/24(土) 22:42:39.21 ID:zBp5Lw5x
レスありがとうございます。 u.authentications を実行すると NoMethodError: undefined method `authentications' for #<ActiveRecord::Relation:0x0000000262c990> となってしまいました・・ 使用しているARのバーションは3.1.1.rc1です。 最近アップデートしたのですが、する前からこのような感じでした。。
>>638 ネットで断片的に情報をかいつまんでやってたら、
いつまでたってもできないと思うよ。
まずは入門書で少なくともモデルのところを通読するのがお勧め。
>>636 to_json に includes オプションをつける
643 :
nobodyさん :2011/09/24(土) 23:10:24.61 ID:6AyX50Ec
そのSQLだと、uはid=1のUserのみからなるコレクションだよ。 (返値も [ ... ] で囲まれている) u[0] とか u.first とかしてみたらどうか。 includes は 1-N 問題を回避するためのeager loadingを行うもの。 SELECT "users".* FROM "users" で必要なuser idを調べて、それに基づいて authentication をイッキする。 SELECT "authentications".* FROM "authentications" WHERE "authentications"."user_id" IN (1, 2, 3, 4, 5) joins は SQL の JOIN句。 SELECT "users".* FROM "users" JOIN authentications ON authentications.user_id = users.id
SEO業者は容赦なく話をぶった切るな 自動投稿なら当たり前だが
/var/www/html/ の下にアプリを作って稼働させていく場合って htmlディレクトリ以下(htmlディレクトリ含む)の権限設定は775でok? ちなみにrootじゃないユーザーでSSHで入って アプリを作っていきます。
>>647 で追記です。
rootとは別途に作った
sshuserというユーザーでは
rails new test_app を実行したときに
パーミッションエラーが出てしまうので毎回rootで操作しています。
sshuserでsshログインしてアプリを作るときだけsudoするしかないのでしょうか?
またrootでrailsアプリを作ると
別ユーザーのftpuserでftpアクセスしたときに
ファイルの削除が行えません。
皆さんは各種ユーザーはどのように設定していますか?
/var/www の下で共同で開発なんかする訳ない。 ftpなんて使わない。 rails以前にlinuxの勉強しなよ。
659 :
635 :2011/09/25(日) 15:04:21.72 ID:vRBCORhD
お礼が遅れましてすみません。
>>640 ですよね。rails3本買ってみることにします。
>>641 ありがとうございます!これが知りたかったのでした。
>>643 詳しいご説明ありがとうございます。
eager loadingについても調べてみてincludesとjoinsの違いがなんとなく分かって来ました。
入力項目にエラーがあった場合、入力画面に戻り各項目の再表示をさせたいと思っていますが、 password_fieldに入力した文字だけ再表示されません。(●●●●も表示されない。) ■ソース <%= form_for @user,:url => { :action => 'hogehoge'} do |f| %> <%= f.password_field :password, {:size => 20, :maxlength => 20, :required => true} %> #@user[:password]には、文字列として'hogehoge'が登録されている。 何か別途指定する必要ありますか?
password_fileldはそういうものです。 もう一度入力させます。
有難う。納得しました。
しっかし、このスレ人気ねぇなw railsがいかに人気が無いか表してる
ここに書く事、特に無いからな。 質問してるのは、ネットだけで何とか習得しようという初心者だし。 質問もはてなとかTwitterで聞いた方が早いし。 あとリンク貼り付けるだけの人力botの存在とか。
ググったりソース読めば大抵何とかなる。
要するにスレの価値なし!
Rubyはソースが簡潔だから、ある程度できる人間にとってはソース読めば解決できるんだよな 既存クラスの拡張も容易だから、気に入らない部分はモンキーパッチも簡単にあてられるし
単にスパムがうざいだけなのだが
673 :
nobodyさん :2011/09/28(水) 01:50:19.68 ID:W++Lg7ZH
674 :
nobodyさん :2011/09/28(水) 02:00:39.65 ID:W++Lg7ZH
675 :
nobodyさん :2011/09/28(水) 02:06:43.28 ID:W++Lg7ZH
676 :
nobodyさん :2011/09/28(水) 04:19:26.67 ID:W++Lg7ZH
スパムの合間を抜いて質問させてけろ Rails3.1にてフォームボタンを押下した後、次のページに遷移するまで そのボタンの横で ビジーのインジケーターをくるくる回すにはどのような手順を踏めばいいかな?jquery?
jquery(javascript)の話だな
ボタンを押されたらインジケータを表示するだけじゃん ページ移動するんだから後のことは考えなくていい 戻るボタン?知るか。
ActiveRecordでのバイナリデータの扱いが上手くいかず教えてください。
require 'rubygems'
require 'active_record'
require 'open-uri'
ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => 'test.db')
class Download < ActiveRecord::Base ; end
ActiveRecord::Schema.verbose = false
ActiveRecord::Schema.define do
create_table "downloads", :force => true do |t|
t.column :image, :binary
end
end
record = Download.new
open('
http://www.jreast.co.jp/map/pdf/map_tokyo.pdf ') do |page|
image = page.read
File.open("image1.pdf",'w'){|fh| fh.puts image}
record.image = image
record.save
end
record = Download.first
File.open("image2.pdf",'w'){|fh| fh.puts record.image}
上のコードでimage1、image2は問題なくAcrobat等で開けます。ところが、
sqlite3 test.db 'select image from downloads where id = 1;' > image3.pdf
とシェルからやるとimage3はpdfとして認識されません(壊れている?)ActiveRecordのバイナリとsqlite3のblobの扱いの理解の足りなさに原因があるとは思いますが、image3をきちんと開くための方法を教えてください。
(要するにrubyであつかったバイナリデータを他の言語等で受け継いで扱いたいのです。)
環境はruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]、activerecord (3.0.1)、sqlite3 (3.6.12) OSX10.6です。
image3なんてどこにもないもんな
691 :
689 :2011/09/30(金) 13:13:17.38 ID:???
ちなみに以下のようにサイズが3049バイト大きくなってしまうので、マッピングのときに何かを追加したりしているのでしょうか? あるいはリダイレクトの仕方に問題が? 201074 Sep 30 11:58 image1.pdf 201074 Sep 30 11:58 image2.pdf 204123 Sep 30 11:58 image3.pdf
sqlite知らんが、select文の結果が バイナリじゃなくて文字に変換されてたりするんじゃないのか?
sqlite3 のコマンドラインで特定のカラムの値をそのまま出力する方法はなかったかと (必ず整形が入る) print Download.find(ARGV[0]).image みたいなスクリプトを書いて、rails runner で動かすのが一番簡単かな
694 :
689 :2011/09/30(金) 16:47:54.83 ID:???
>>692 >>693 適切なアドバイスありがとうございました。結局BLOBはバイナリそのままではないようですね。
同じSQLiteのDBをC言語などであつかうつもりですのでいったんBase64でエンコードしてから保存することにしました。
SQLiteの性質を十分には把握していなかったようです。あるいみActiveRecodeの楽さかげんが際立ってしまった。
696 :
693 :2011/09/30(金) 17:09:59.39 ID:???
>>694 いや、BLOBが悪いんじゃなく、sqlite3 コマンドを使おうとしてるのが悪いと
言ってんだけど…
697 :
nobodyさん :2011/09/30(金) 23:12:48.17 ID:d8ot3xr3
bundle install --path vendor/bundle さえしとけば 必要なものは優先的にvendorの中を覗きにいくようになるのでしょうか? それともRails本体の中にあるgemを優先的に覗きにいくのでしょうか?
active scaffoldって3.1に対応してないよね? 残念だ
賢い皆様にお伺いしたいんだけど 管理者用のscaffoldへのアクセス制限は どのような仕組みでかけてますか?
そもそもscaffoldを使わない
>>699 の考えるscaffoldという概念は、実際と少しずれてるんじゃないだろうか
nginxの人だろ
703 :
nobodyさん :2011/10/01(土) 02:48:44.76 ID:ENlvmGfR
>>697 script/rails runner 'puts $:'
あの、大学がほとんどMacしか置いてないんでMacで勉強してるんですけど、ここで質問しても大丈夫ですかね?
Railsの事ならどうぞ
MacでのRails用環境構築とかかな? OSのバージョンとかは書いてね
707 :
nobodyさん :2011/10/01(土) 14:58:16.00 ID:ENlvmGfR
Windowsの質問よりよほどマシ。
ありがとー MacにphpMyAdminいれて鯖を作りたいです どうすればいいですか?
710 :
nobodyさん :2011/10/01(土) 15:55:30.50 ID:ENlvmGfR
まてせめてRailsの質問にしろ。
まずターミナルを起動します。
phpMyAdminの質問禁止。自分でどうにかしろ。
715 :
704 :2011/10/01(土) 19:50:30.99 ID:???
すいません遅くなりました、
>>704 の者です。
http://www.oiax.jp/rails/rails3.html を参考にして"第12回: ユーザー認証(1)"までなんとかたどり着いたのですが、
この第12回の中盤のDeviseをbundle installする過程でつまずきました。
http://www.oiax.jp/rails/rails3/authentication1.html にあるように
Gemfileに 「gem 'devise', '1.1.2'」の一文を追加し、ターミナルにてbundle installを実行したところ、
以下のようなエラーを吐いてしまいました。
「devise v1.1.2はこのバージョンのrubyに対応してないぞ」と言われてる気がするんですが、
これはrubyのバージョンを下げてしまうべきですか?
それとも対応した新しいバージョンのdeviseが出てたりするんですか?
初心者で申し訳ないですが、誰か分かる方いらっしゃいましたら教えてください。。
Ore-no-Imouto-no-MacBook-Pro:nchak hiro$ bundle install
Fetching source index for
http://rubygems.org/ Bundler could not find compatible versions for gem "bcrypt-ruby":
In snapshot (Gemfile.lock):
bcrypt-ruby (3.0.1)
In Gemfile:
devise (= 1.1.2) ruby depends on
bcrypt-ruby (~> 2.1.2) ruby
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
ruby のバージョンは? あと、そのrubyってどうやって入れた?もしくは元から入ってたやつ?
717 :
704 :2011/10/01(土) 20:16:43.45 ID:???
「Ruby on Rails 3.1 を Mac OS X にインストールする手順をかなり丁寧に説明してみました - Rails 雑感 - Ruby on Rails with OIAX」
http://www.oiax.jp/rails/zakkan/rails_3_1_installation_on_macosx.html railsの環境は上の記事を参考にして整えました。
当方の環境がOSX v10.7.1 Lionでしたので、"Rubyを更新"というステップは飛ばし、元から入っていたバージョンを使っています。
一応コマンドもやってみました。
$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
718 :
nobodyさん :2011/10/01(土) 20:52:12.94 ID:ENlvmGfR
rubyのバージョンの問題ではなさそう。 bcrypt-ruby (暗号化に関するgem)の、 deviseが期待するバージョンでは条件を満たせないと言っている。 Rails 3.1 は ActiveModel の特定のバージョン (=3.1.0) のみを使う。 ActiveModel 3.1.0 は bcryt-ruby の特定のバージョン( ~> 3.0.0) を必要とする。 で、あなたの入れようとしたdevise は ~> 2.1.2 という条件の bcryp-ruby を 使うといっているわけだ。 ~> ってのは、ドットで区切った上位の数値が同じで あれば、下の方のバージョンだけはより大きなものでもいい、という指定で、 残念ながら 3.x では ~> 2.1.2 という条件を満たせない(3は2より大きいが最上 位が違うのは受け入れられないので) Rails 3.1.1 (rc2) は bcrypt-ruby を必須gemから外しているからなんとか なるかもしれないけど… 勉強に rc ってのもな…
719 :
nobodyさん :2011/10/01(土) 20:54:26.04 ID:ENlvmGfR
Gemfileのバージョンの部分削ってから、bundle installした方がいい。 その記事と、もしかしたら挙動が違うかも知れんが。 あと今後の事を考えると、rubyはデフォルトのじゃなくて rvmで入れた方が良いかも。
ruby は1.9.2以上で
722 :
nobodyさん :2011/10/01(土) 21:05:49.15 ID:ENlvmGfR
ところで、Lion付属のRubyは日本人にとって非常に残念なバグがあるので、 その点でも、新しいの入れたほうがいいな。 $ /usr/bin/ruby -vKu -e 'p "あいうえお"' ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0] "あいうえ¥343¥201¥212" p250で直ってるところが残念すぐる。
-Ku って使った事ないから気がつかなかった。 日本語はpじゃなくてputsしてるし。
724 :
704 :2011/10/01(土) 21:44:13.35 ID:???
>>718-719 詳しくありがとうございます!
つまり、Railsを最新のRC版に更新したとしても、
Rubyじゃなくてbcrypt-rubyのバージョンをv3.0.0以下に下げなくてはいけないという事なんですね。。
>721
>>ruby は1.9.2以上で
やっぱ新しくすべきですか。
ちなみにv1.9.2とv1.9.3(RC1)のどちらがおすすめですか?
725 :
704 :2011/10/01(土) 21:44:28.65 ID:???
>>722 バグ!!なるほど・・・よく分からないけど
## test.rb ##
arr = Hash.new
arr["No-001"] = "春"; arr["No-002"] = "夏"; arr["No-003"] = "秋"; arr["No-004"] = "冬"
p(arr)
for n in arr; print("KEY:", n[0], " --> VALUE:", n[1], "\n"); end
## /test.rb ##
を実行すると、
$ ruby test.rb
{"No-001"=>"\346\230\245", "No-002"=>"\345\244\217", "No-003"=>"\347\247\213", "No-004"=>"\345\206\254"}
KEY:No-001 --> VALUE:春
KEY:No-002 --> VALUE:夏
KEY:No-003 --> VALUE:秋
KEY:No-004 --> VALUE:冬
って感じに、p(arr)の出力が数字になるのもRubyのバージョンの問題なんですかね?
726 :
704 :2011/10/01(土) 21:45:08.63 ID:???
>>720 Gemfileのバージョンの部分を削ったらとりあえずエラー出ずに通りました!!
$ bundle install
Fetching source index for
http://rubygems.org/ Enter your password to install the bundled RubyGems to your system:
Using rake (0.9.2)
Using multi_json (1.0.3)
Using activesupport (3.1.0)
Using bcrypt-ruby (3.0.1)
Using builder (3.0.0)
Using i18n (0.6.0)
Using activemodel (3.1.0)
Using erubis (2.7.0)
Using rack (1.3.3)
Using rack-cache (1.0.3)
Using rack-mount (0.8.3)
Using rack-test (0.6.1)
Using hike (1.2.1)
Using tilt (1.3.3)
Using sprockets (2.0.0)
Using actionpack (3.1.0)
Using mime-types (1.16)
727 :
704 :2011/10/01(土) 21:47:11.49 ID:???
Using polyglot (0.3.2) Using treetop (1.4.10) Using mail (2.3.0) Using actionmailer (3.1.0) Using arel (2.2.1) Using tzinfo (0.3.30) Using activerecord (3.1.0) Using activeresource (3.1.0) Using bundler (1.0.20) Using coffee-script-source (1.1.2) Using execjs (1.2.9) Using coffee-script (2.2.0) Using rack-ssl (1.3.2) Using rdoc (3.9.4) Using thor (0.14.6) Using railties (3.1.0) Using coffee-rails (3.1.1) Installing orm_adapter (0.0.5) Installing warden (1.0.5) Installing devise (1.4.7) Using jquery-rails (1.0.14) Using json (1.6.1) Using rails (3.1.0) Using sass (3.1.7) Using sass-rails (3.1.3) Using sqlite3 (1.3.4) Using sqlite3-ruby (1.3.3) Using uglifier (1.0.3) Using will_paginate (3.0.pre2) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
728 :
704 :2011/10/01(土) 21:48:50.08 ID:???
>>728 まあ、大体そんな感じ。
Lionでは、その記事のreadlineの部分は無視していい。
homebrew使ってるなら
$ brew install readline
しといても害は無い。どうせ他に何か入れた時に入るから。
ruby のバージョンは 1.9.2 と 1.9.3 と迷いどころだけど、1.9.3-head (もしくは1.9.2-head)としとけば良いような気もする。
あと毎回 rvm use するのが面倒なら、.rvmrc ファイルを作る。
前に挙げてた記事の通りやっているのだと、workディレクトリ作ってその下で作業員してるかも知れない。
その場合、
$ cd work
$ echo '1.9.3-head' > .rvmrc
$ cd ..
$ cd work
するとなんか聞かれるから、yと答えて。
そうするとworkにcd すれば自動で
1.9.3-head使うようになるから。
誰かactive-scaffold使ってる人いませんか?
>>728 あ、ごめん。
$ echo 'rvm 1.9.3-head' > .rvmrc
だった。
ちなみに、安定版は1.9.2だから、1.9.2の方が初心者は良いかも。
で、
$ which ruby
したら分かるけど、使ってるrubyが変わってるから、もう一度 bundle install して
>>730 それ使ってないんで分からんが、
ググったらすぐ日本語の記事出てきたけど…。
>>732 rails3.1で使ってる人はいないと思う
俺もdeviseのことで質問。 特定ユーザーをログイン・パスワードの再発行禁止にしたいんだけど どうすればいいのかな? stack overflow見たらbannedフィールドを追加してごにょごにょって書いてあったんだけど出来なかった。
>>733 なんか、そのフォークされたやつ見に行ったら、3.1対応してたけど
736 :
704 :2011/10/01(土) 23:26:05.35 ID:???
>>729 >>731 あ な た が 神 で す か
$gem install bundlerしてから$bundle installしたらいけました!!
自動ってすごいっすね・・・しかもなぜか分からないけどrails serverの起動速度が格段に上がった気がします
本当にありがとうございました。
>>736 他には、毎回railsって打つのめんどいから
.bashrcかなんかで、 r にrails をエイリアスさせる。
すると、
$ r s
でサーバ起動する
$ r c
がコンソール
$ r g
でgenerate
この辺が大体みんなやってる基本
738 :
nobodyさん :2011/10/01(土) 23:45:34.34 ID:ENlvmGfR
1.9.3はライブラリロード周辺に手が入っていて、railsコマンドみたいな 起動時に大量にrequireするやつには覿面に効いてるはず。
>>734 devise使わない派だからアレだけど、
Stack Overflow読むくらいなら何とかできそうだが。
user.banned = true
は当然してるとして、
あとは解法に書いてあるメソッドがまだあるのか、呼ばれてるのかgemの中grepかけるて読みに行く。
などなど。
devise詳しい人の登場を待つか…
>>739 他に何かライブラリ使ってるのか、それとも自分で書くの?
>>740 使う時はwardenくらいは使う。
後は別に全部自分で書けるし。
要件によって登録フロー全然違うから、自前の方が好き勝手できる。
devise使っても良いんだが、何かあった時に読むのがツライ。
自分とこのサービスなら(とかdeviseに合わせて要件変えられるなら)別にdeviseで良いと思うよ。
>>739 trueって1を入れるんじゃないの?
bannedフィールドをintegerにして
1をいれて試してみたんだけど
743 :
nobodyさん :2011/10/02(日) 12:09:15.08 ID:SXDeI2UB
>>739 このようにしてみたときuser.bannedが空だったら問題なくサインインされるけど
trueとか何か入っていたときは
「ページの自動転送設定が正しくありません。このアドレスへのリクエストに対するサーバの自動転送設定がループしています。」
と出てしまい、まともにサイト内リダイレクトされない。
ちなみにサイト内じゃなく redirect_to '
http://yahoo.co.jp 'としてもリダイレクトされない。
どこで引っかかってるんだろう??
class TodosController < ApplicationController
# GET /todos
# GET /todos.json
before_filter :authenticate_user!
before_filter :deny_banned
protected
def deny_banned
if current_user.banned?
redirect_to :controller => 'welcome', :action => 'index', :notice => "You are banned from this site."
end
end
...ここから下がdef indexなど
>>743 何も読まずに答えると、書いてあるまんま。
リダイレクトがループしてる。
一度認証してログイン成功してから、ban調べてる。
banされた時のリダイレクト先は、認証してたらどこかにリダイレクトする事にしてるんちゃう?
で、飛ばされた先で、もう一度banでリダイレクト…が続いてる。
だから、ban判定したらセッション切ってログアウトさせて。
そういうメソッドがあるはず。
外に飛ばしてもダメってのは分からんが
>>743 もしくは、ban先でも認証求めてるとか。
で、認証・ban・認証・banのループ。
その例示コードが実際と違うと思うけど。
>>746 ちなみにルーティングはこうしています
Sample::Application.routes.draw do
root :to => "welcome#index" devise_for :users, :controllers => { :registrations => "registrations" }
get 'todos', :to => 'todos#index', :as => :user_root resources :todos
devise_for :users do get 'logout' => 'devise/sessions#destroy' end
end
同じような感じで作ってみたけど、ループしなかった。 なんか出されてる情報と、実際のコードが違うんだと思う。 とりあえず、 if current_user.banned? の次に sign_out って入れてみ
750 :
nobodyさん :2011/10/02(日) 16:51:36.08 ID:SXDeI2UB
>>749 ありがとう!それで確かに Usersテーブルのbannedフィールド(varchar)に
trueが入っているときはログインできずにroot_pathにリダイレクトされるようになりました。
しかし、bannedフィールドを手動で空にしてログインしたときは下記のエラーが出ます。
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each
>>750 migrationの書き方が悪い。
t.boolean :banned, :default => false
にして。
752 :
nobodyさん :2011/10/02(日) 17:08:33.19 ID:SXDeI2UB
>>751 これのどの行にそれを入れて rake db:migrate を実行すればいいのでしょうか?
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
# t.encryptable
t.confirmable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
def self.down
drop_table :users
end
end
昨日から答えすぎた。しばしROMる
>>752 カラム追加はきちんとmigrationファイル使って。
myadminとかで追加はダメ。
self.up の中のどこかに書いとけ。
755 :
nobodyさん :2011/10/02(日) 17:24:31.65 ID:SXDeI2UB
>>754 6行目に入れて rake db:migrateしても
20行目に入れて rake db:migrateしても
bannedフィールドが追加されないんです>_<
757 :
nobodyさん :2011/10/02(日) 17:45:50.02 ID:SXDeI2UB
>>756 ありがとう。無事フィールドが追加されました。
>>751 やっぱり
>>750 のエラーが出ますね。。。
bannedフィールドにはしっかりと0が入っているのですが
758 :
nobodyさん :2011/10/02(日) 18:44:39.11 ID:0eXzMNTG
ただの整数カラムだと0はRuby的に真なので、論理型カラムを持たないDB の場合は、幅1の整数は論理型カラムと見なすみたいなことをARアダプタの レベルでやってたっけな。
Ruby では false または nil だけが偽で、それ以外は 0 や空文字列も含め全て真です。
>>759 これはそういう話じゃないから。
db的には1/0であっても、t.booleanと書いてあれば、ActiveRecordは自動的にtrue/falseに変換してくれる。nullならnilになる。
で、
>>750 のエラーはnilにメソッド送ったりすると出る。
これが出るのは、いろんな理由が考えられる。
カラム追加してからサーバを再起動してないとか、
ブラウザ立ち上げっぱで、戻るボタンで戻って動かそうとしてるとか
そういう初歩的なミスだと思う。
761 :
>>752 :2011/10/02(日) 21:03:31.22 ID:???
bannedに手動で1を入れると期待しているとおりログインがブロックされます。
手動で0を入れてログインしようとすると
>>750 のエラーが出ます
nilやnullとして判定されずtinyint文字列一文字として認識されているようです。
762 :
>>752 :2011/10/02(日) 21:10:37.55 ID:???
ちなみに0を入力するのではなく nullにしたときもログインできないです
手動でっての、気になるからやり方さらして。 mysqlでやってみたけど再現しなかった。 mysqlのコンソールからupdateかけたり、rails のコンソールからモデル経由でもやってみたけど、再現せず。
なんか別に違う事やってるんじょないかな
ログイン成功後のページでいらん事してるとかだったり…
分かってしまった…。
>>743 これだ。
protected が先に書いてあるから、その下全部 protectedになって、indexとかが見えなくなってる。
で、多分scaffoldで作ったんだろうから todos#index で、モデルのfindも見えなくなって、でもviewはあるから表示しようとする。
@todos.each が viewにあるから、nil.each でエラーになる。
767 :
>>752 :2011/10/02(日) 22:58:57.16 ID:???
>>763 phpMyAdmin上でbannedフィールドのところのnullにチェックを入れてSaveしてるだけです。
しかし、nullとして判定されていない模様。
ログイン成功後は
>>743 のtodosコントローラーのindexを開いています。
>>767 null入れるなよ…。
1/0 入れろ。
null入れたら、banned? 呼んだ時にエラーになるのは当たり前。
>>767 >>767 を読め。
これで分からなければ devise 以前にrubyが分かってないから勉強やり直して。
public, pritected, private 辺りを。
771 :
>>752 :2011/10/02(日) 23:58:01.20 ID:???
772 :
>>752 :2011/10/03(月) 00:10:42.59 ID:???
protectedを外したら、すんなりとうまく行きました!ありがとう!
<p class=ほにゃらら にした場合は、noticeがブランクでも しょっぱなから装飾しているバックの枠も表示されます。 どのようにすれば noticeがブランクの場合は何(枠)も表示されない。 そうでなければ装飾した枠でnoticeを囲んでメッセージを表示 ってのは出来るようになりますか?
それはもうrails関係ない話のような・・・ とりあえず、style="display:none;"にしておいて、ページ読み込み時にnoticeに 値が入ってたら、display:noneを消すとか。 もちろん、javascriptで。
>>776 自分の場合は、jqueryでやることが多いので、
例えばこんな感じ。
きれいな方法じゃないかもしれないが。
<p class="notice" style="display:none;">
<%= flash[:notice] %>
</p>
<script type="text/javascript">
$(function(){
<% if flash[:notice] %>
$('.notice').show();
<% end %>
});
</script>
>>777 そもそもflashはどこで使ってる?
各コンテンツの中?
それともページ全体一括して最上部に一行まとめて取って
noticeとかのメッセージ表示してる?
779 :
777 :2011/10/03(月) 03:13:39.64 ID:???
実はflashは使ってない。
>>774 がnoticeって書いてたから、flash[:notice]の事かな?と思ったので
例に書いてみた。
でも似たような事する場合は、各コンテンツの中に書いてる。
<% if flash[:notice].present? %> <p class="notice" style="display:none;"><%= flash[:notice] %></p> <% end %>
>>780 自分ももしflash使うならこんな感じだけど、
if で囲ったら、display:none はいらないかと。
あと、この場合なら present? も使わない。
>>777 普通flashってコントローラーからメッセージだけを送るじゃないですか?
メッセージを送るときに
同時にスタイル(styleを変数にしとく?)も指定する方法あったら教えてください
>>787 お前はコントローラでデザインの事を気にしたいのか?
どう考えても筋悪すぎるだろ。
あと
>>777 は、やり過ぎ。jquery で視覚効果付けるためにああやってるだけ。
スタイルはスタイルシートで書いてください。以上
>>788 例えばflashのnoticeでエラーメッセージを出すときは背景は赤枠の装飾
成功のメッセージ表示の時は緑といった具合に条件によって異なるスタイル属性を持たせたい場合どうします?
devise使ったとして ユーザーがメアドを変えたいときはどうすればいいですか? メアドがユニークなキーになってるみたいなので。 普通にUsersテーブル用のフォームを作って、そこでパスワードが一致したらレコードを上書きするようにすればok? 例えば少し出来るユーザーがフォームをまんま保存して 非表示になってるUsersテーブル内のフィールドを手動でhtmlに追加して、 そこから保存ボタンでフォーム内容更新のアクセスがサイトに来たときは 非表示にしてたところのフィールド内容まで更新されてしまわない?
お前全部聞くのかよ
ずっと前から聞きまくってるやつと一緒だろ。気づけよ
無料サポートか何かと勘違いしてるんだろうな
> そこから保存ボタンでフォーム内容更新のアクセスがサイトに来たときは > 非表示にしてたところのフィールド内容まで更新されてしまわない? そうだよ^^ Railsはセキュリティとか一切考えてないからそういう用途に使っちゃダメだよ^^
煽って答えを引き出そうとしてもムダw
799 :
nobodyさん :2011/10/03(月) 22:18:33.32 ID:x3UrySwP
>>790 flashのキーって何でもいいんだよ。複数設定したっていいんだよ。
>>799 例えば
warningっていうnoticeを出したいときはstyle=warning
successっていうnoticeを出したいときはstyle=success
の属性を与えたい場合
コントローラー
ビュー側
それぞれどのように記述すればいいですか?
flashは構造的には、ただのハッシュと同じ。 好きなように使えるんだから、あとは自分で考えて。
コントローラからビューへ渡された変数を、javascriptで使用する為には、 どのような方法が一番多く使われてますか?
自分で考えろよ。簡単だから
頭付いてないのかな、この教えて君は。 プログラミング向いてないわ。
JavaScriptを別ファイルに追い出したときにどうするんだろうな *.html.erb に代入部だけ書くしかないのかな ファイルが分かれて保守性が落ちそうだよなー 変数は window オブジェクトのプロパティとして書くのが一般的なようだけど、 全然 window オブジェクトと関係ないじゃん なんだか美しくないよなー 文字列を埋め込むときは String#encode_json でいいのかな JavaScript の文字列にしたいだけなのに、JSON って単語が出てくるのも なんだかなー とかいろいろ悩みながら、「まぁ、しゃーないか」と思いながら書いてるけど
すいません。
gemをアプリのvendorフォルダーの中へbundleしても local/lib内のgemのほうを優先的に読みにいく。 どうすればフォルダ内のほう読むのかな?
herokuがpythonにつづいてscalaサポート。 なんだか俺たちのherokuが、遠いところへ行ってしまったなって。
RoR初心者です。 本読んでて、 class hoge string :foo end みたい表現が出てくるのをたまにみかけるんですが、 これってどういう意味なんでしょうか?
>>811 まずはrubyの基礎抑えて。
RailsはRubyを拡張しまくってる。
>>811 のはその通りのコードじゃないけど、どこのどういうものかによって説明が違う。
クラスメソッドなのか、ブロックなのかとか。
>>811 ruby はクラス定義の中でもメソッドを実行できる。
817 :
nobodyさん :2011/10/07(金) 20:19:59.34 ID:gnXICo2L
あまり詳しくないので質問させて下さい。m(_ _)m railsのコマンドが実行できない(root権限がない)サーバへ railsで構築済みのシステムを移転させることはできるでしょうか? コンパネしか使えないサーバに入れるしかなくて、 FTP経由でアップはできるのですが、 パスやらDBの設定などを変えればできるなら嬉しいのですが、、、
>>817 基本的にムリ
動いたとしてもCGIにしなきゃいけないので、パフォーマンスが出ない
821 :
nobodyさん :2011/10/08(土) 00:45:30.82 ID:/K5pafES
あ
3.1.1 出たね
827 :
nobodyさん :2011/10/09(日) 13:29:31.65 ID:H1r7OEPY
railsのスマートフォン対応はjpmobileが最有力?
ガラケーが無いなら、別にjpmobile使わなくてもできる
逆に jpmobile 使ってスマートフォンの対応にハマる場合もあるからな。
831 :
nobodyさん :2011/10/09(日) 23:23:21.46 ID:msNh+kWF
そいや、 galakei っていうのもあったな。
832 :
nobodyさん :2011/10/10(月) 00:28:21.58 ID:DCY1ongO
てst
質問です 言語というテーブルがあるとして 1.Japanese 2.English 3.Spanish 4.Chinese とレコードがあるとしたら リレーションキーとなるフィールドは別途数字フィールドを用意したほうがいいですか? それとも JAN ENG ESP CHN のように省略系の入った文字列フィールドで繋ぐのはありですか? 後者のほうが頭に入れておきやすいのですが
関係ないけどJANって略し方はどうかと思う
Windows で Ruby 1.9 + Rails 3.1 + MySQL 5.5 (mysql2アダプタ) の開発環境構築って凄まじい茨の道ですね…
>>833 Railsの関連付けはID列で行うのが前提なので、そうするがよろし
>>836 どっち?
数字をリレーションキーにして繋ぐ?
それとも文字列をリレーションキーにして繋ぐ?
838 :
836 :2011/10/10(月) 06:04:50.53 ID:???
>>837 リレーションキーとか言う造語使われても何がなんやら
コミュニケーションロスを防ぐためにも、一般的な用語使ってくれ
でなきゃ説明できん
>>835 素直にVMでLinux動かして、ターミナルで接続した方が良いよ
>>833 都道府県とかもそうだけど、そういうほとんど変化しないもので、量もそんなに無いのはDBに入れてない。
yamlとかで書いて、メモリ内のオブジェクトに読み込んでる。
841 :
nobodyさん :2011/10/10(月) 15:24:46.15 ID:S/1HVBVK
初歩的な質問をさせてください 例えばdb/migrateのところでテーブル構成を記述して rakeでテーブル構築を実施しますが 後々、フィールドを追加したくて migrateのファイルに追記してテーブル構築をリセットしたい場合は 毎回データベースを手動で削除してから rake db:create rake db:migrate をするしかないのでしょうか? 1コマンドで更新できたりすればいいのですが (フィールドの削除があった場合も対応できるような)
842 :
nobodyさん :2011/10/10(月) 15:51:39.04 ID:FH0Njp3x
フィールドを追加するmigrationを作らんの?
843 :
nobodyさん :2011/10/10(月) 15:59:33.56 ID:FH0Njp3x
開発中なら rake db:reset してもいい。
844 :
nobodyさん :2011/10/10(月) 16:54:11.70 ID:S/1HVBVK
>>843 rake db:resetしても記述を消したフィールドは
そのまま削除されずデータベースの中には存在していました
migrationファイルの記述と同期がうまく取れてないみたいです。
>>844 db:setupで。
そっちのバージョン分からないけど3.0以降と仮定して
db:migrate:reset でもいいかも
存在しないコントローラーやアクションにアクセスしたときに railsそのもののエラーメッセージじゃなく アクセスされたページは存在しません みたいなページへ飛ばすにはrailsの場合はどうしたらいいの?
>>848 ApplicationController に rescue_from を使いたまえ
production環境で動かすとそうなる。
851 :
nobodyさん :2011/10/10(月) 18:12:43.37 ID:FH0Njp3x
標準設定だと、 * production環境であり (consider_all_request_local == true ) * ローカルリクエストでない (request.local? == false) を満たす場合は、例外クラスごとに特定のステータス表示になる。 RoutingError 時は 404.html だな。 満たされない場合は例外詳細表示になる。 action_dispatch/middleware/show_exceptions.rb
852 :
nobodyさん :2011/10/10(月) 20:26:04.83 ID:7ErGP0Xf
railsで単一テーブル継承を利用せずにcompositeパターンを実現するためにはどうすればよい? というか、抽象modelを作成して継承させることってできないですか?
>>852 それはacts_as_tree みたいなのは嫌という事なの?
バリデーションのとき、エラーを出して登録させたくない項目と 警告を出して登録させてもよい項目がある場合、どうしたらいいの?
画面遷移が分からんから答えようがない
>>852 スカスカになるのが嫌という事かな?
だったら木構造の永続化にだけ acts_as_tree 使って、中に入れたいデータは別モデルにする。
中のデータも個々で全然違うモデルにしたければ、ポリモーフィックで繋げたらどう?
ポリモーフィックの子から親に辿る感じで。
で、木構造の方に使いたいメソッドを投げて、中身にdelegateしてやれば良いような気がするけど。
必要であれば中身から、木構造の方にまたdelegateして。
なんか重そうな気もするけど、簡単に思い付くのはそんなとこかな
あ、中身から木構造へは、普通に関連辿れば良いだけか。
developmentモードのまま公開運用しています。 productionモードと何が違うの? キャッシュ対応くらい?
productionモード 設定ファイルを含め、いろんなファイルを読み込んだままリクエストに応える。 例えばモデルのファイルを変更しても、 サーバーをリセットしないと反映されない。高速。 developmentモード 毎回、設定ファイルを含め、いろんなファイルを、リクエスト毎に読み込む。 例えばモデルのファイルを変更すれば、すぐに反映される。激遅。話にならない。
>>859 ありがとうございます。
サーバーリセットって
apache再起動(passenger使用時)のことですね?
でもrake db:migrateしても
developmentのテーブルにしか構築が反映されないのはなぜ?
>>860 rake db:migrate production
migrateだとRAILS_ENV=production だっけか
863 :
nobodyさん :2011/10/11(火) 20:05:17.88 ID:7/SswkVJ
RAILS_ENV=production じゃね?
また、とことんまで教えて君かよ
プラグインのdeviseを使用。 ユーザー登録後のメアド変更で 再度確認用のアクティベーションメールを送るって出来る? もちろん変更後のメアドに対して 簡単な実装方法あったら教えて
これもこないだの人か
ググるかdeviseの該当部分を読む
共有レンタルホスティングでRuby1.9に対応している場合 Rails3.xのアプリをアップロードするだけで Web上で動くようになりますか? プラグインなどはアプリフォルダーのVendor配下に入れた状態で。
869 :
nobodyさん :2011/10/12(水) 22:33:05.60 ID:pwKBBJlW
インタプリタよりもWEBサーバ設定のほうが問題。 とりあえず一般的なレン鯖よりherokuあたりに載せるほうが苦労が少ないと思う。
railsで動かしてるサービスかどうかなんて ソースを見りゃすぐ分かるw <script src="/assets/hoge.js みたいにassetsの中にjavascript読み込みに行ってるからw
872 :
nobodyさん :2011/10/12(水) 23:26:45.63 ID:pwKBBJlW
>>869 後はAWSなどのクラウドがいいな
自分の好き放題できるし
もちろん、自由には責任がついてくるのは実社会と変わらないが
>>875 クラウドサービスって、ストレージだけじゃん。
タイトルだけ見て関係ない記事貼るなよ馬鹿。
886 :
nobodyさん :2011/10/21(金) 03:38:11.63 ID:xMCE8FuR
ここって延々とリンクを張るだけのスレなんですか?
888 :
nobodyさん :2011/10/21(金) 09:09:10.12 ID:OzRHPw76
見えなかったことにして質問とかしていいよ。
has_many through の中間テーブルにある条件でフィルタする時って、 :condition書いたりブロック渡したりするけど、 そこに中間テーブルに書いたscope渡せないのかな。 同じ条件を左右と真ん中に書くの嫌なんだけど。
>>890 おお、まさに求めていたものです!
ありがとうございます
リンク貼られて流れる前でよかったな
893 :
nobodyさん :2011/10/22(土) 12:34:35.20 ID:x4TX45Mm
blogsテーブルとそれに属するentriesテーブルがあります。 通常はentriesはcreated_at降順で並べたいのですが、 blogs.status=1の時のみ、created_at昇順で並べたい、という要件があります。 素直に実装すると、entriesを表示する全ての箇所で、 if entries.blog.status = 1 entries.order('created_at DESC').each {} else entries.order('created_at').each {} end のようなコードになります。 これが結構煩わしいので、場合分けしなくてもよい方法を探しています。 entryモデルの中でscopeを定義しようとしても、 scope定義の中からblogを参照する術が無いし、 blogモデルのhas_many :entries, :orderで指定しようとしても、やはりblog.statusを参照する術がありません。 何か良い方法は無いでしょうか。
なんでentriesから行こうとするの? if blog.status == 1 blog.entries.order() # order A else blog.entries.order() # order B end みたいにすれば良いのでは。 scope 使うならjoinして中で判別したら良いし
895 :
893 :2011/10/22(土) 13:20:08.08 ID:x4TX45Mm
>>894 ありがとうございます!こんなに早くレスを頂けるとは。。
すいません。コードの方は単純な間違いです。
いずれにしても場合分けが毎回発生するのが問題でした。
そしてscopeにjoinが使えることを初めて知りました。
これで解決できそうです。ありがとうございました。
routes.rbについて質問させてください
http://***.com/歴代の総理大臣 というように日本語が含まれたURLを作る場合に、
map.connect "歴代の総理大臣"
と記述して動くサーバーと、
map.connect "%E6%AD%B4%E4%BB%A3%E3%81%AE%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3"
とエンコードしないと動かないサーバーがあります
この辺の挙動の違いはおそらくRailsの問題ではなくてサーバー側の設定だとは思うのですが、何かアドバイスいただけると幸いです
使っているサーバーはCentOSやローカルのMacだったりとバラバラです
URLエンコードで統一すればいいじゃん
899 :
896 :2011/10/22(土) 20:42:13.78 ID:???
900 :
896 :2011/10/22(土) 20:49:54.37 ID:???
すいません途中で書き込んでしまいました
>>897 今までは非エンコードとエンコードの両方をroutes.rbに記述して対応していました
そうすることで開発用ローカル(エンコードのみ動く)と実機サーバー(非エンコードのみ動く)の両方で同じroutes.rbを使えたからです
ただ、最近借りた海外VPSでは非エンコードとエンコードのどちらも全く受け付けないので、根本的な解決を図ろうと質問しました
すみません。おしえてください。 ubuntu 11.10 ruby 1.9.1 gem --version Invalid gemspec in [/var/lib/gems/1.8/specifications/json-1.6.1.gemspec]: invalid date format in specification: "2011-09-18 00:00:00.000000000Z" Invalid gemspec in [/var/lib/gems/1.8/specifications/tilt-1.3.3.gemspec]: invalid date format in specification: "2011-08-25 00:00:00.000000000Z" とエラーがでるのですが、、、 どうしてでしょうか?
902 :
nobodyさん :2011/10/23(日) 15:50:11.34 ID:FKiWFVH2
Rails3系の話なら、1..9.1はドキュメントに not usableと書いてあるんだが。
903 :
nobodyさん :2011/10/23(日) 16:01:51.71 ID:FKiWFVH2
904 :
896 :2011/10/24(月) 17:34:01.20 ID:???
>>896 ですが少し解決しました
例えば「あ」という日本語URLをroutes.rb内でデコードする際に、
「%e3%81%82」になる環境と「%E3%81%82」 になる環境があるようです(大文字or小文字)
ruby/rails/passengerのバージョンを全く同じバージョンにして複数の環境で試してみたところ、
CentOS 5.5環境では大文字に、CentOS 6では小文字になりました
何が原因なのかは結局わかりませんが一応自己解決しました
質問させてください。 Usersテーブル(id, name) Messagesテーブル(user_id, from_id, body) があるとして簡易メッセージ機能を実装したいとします。 その際にリレーションを張るとしたら、 Messageテーブルから見たとき user_idが送信宛先ユーザーのid、 from_idが送信元(送信者)のidとして それぞれどのようにモデルには記述すべきでしょうか? どちらも同じUsersテーブルにリレーションを張ることになります。 通常であれば テーブル名の単数形_idのフィールドを用意するのでしょうが この場合は 送信宛先、送信元ともにUsersテーブルなので重複してしまいます。
from_idでいいじゃん
>>906 from_idでusersテーブルのidに繋げられますか?
ああDBのほうじゃなくてモデルね class Message < ActiveRecord::Base belongs_to :user belongs_to :from, :class_name => 'User' end
>>908 ありがとうございます
Usersモデルからはhasしなくてもいいんですか?
また何から何まで教えて君かよ
912 :
nobodyさん :2011/10/25(火) 20:37:49.79 ID:8ijHAbC2
Rails 自己参照結合
>>910 みたいに煽ってる奴が一番無知なんだろうなw
914 :
nobodyさん :2011/10/26(水) 04:03:35.48 ID:V3wQJwQn
質問させてください。 以下のようなモデルを作るとします。 $ rails g scaffold Product name:string price:float url:string $ rake db:migrate そして、Productモデルクラスでinitializeメソッドを追加します。 class Product < ActiveRecord::Base def initialize @foo = 1 end end そうすると、scaffoldの画面で新しいProductオブジェクトを作ろうと「New Products」リンクをクリックすると、 You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.[] というようなエラーが出てしまいます。 ちなみにinitializeメソッドをコメントアウトすると治ります。 どうしてinitializeメソッドを追加するとこうなってしまうのでしょうか?
>>916 initialize メソッドは Product.new のときに呼ばれるメソッドなので、
それを上書きしちゃったらダメ
>>916 また何でも教えてくれクンかよ
これだから日本人はw
なんでも何も、勝手にメソッドを上書きして動かないとか、 どこに疑問に思う余地があるんだよ
920 :
nobodyさん :2011/10/26(水) 20:50:00.49 ID:NrqfyF3v
ふつうは元の初期化をするためのsuperをinitializeの中のどこかで呼ぶ ことになるだろうし、AR::Baseのサブクラスなら after_initialize や after_find というコールバックがあるな。
初心者には分からんかもな。 コンストラクタはinitializeです、ここで初期化しますってのをRubyの本で読んだ後に、ARでそれやったら動かないみたいなもんだから。
AR での問題ではなく、継承使ってる場合なら普通に発生するので、初心者だからと言って ごまかせる話ではないような さすがに継承も知らん、という状態だとコードはほとんど書けないだろうし
railsを外部委託したいんだが SNSサイト 25テーブル 150カラム 遷移ページ 30 サーバー構築手数料こみこみ(ハードウェア代は抜きとして) でいくらくらいが妥当かな?
ついに教えて君が根を上げたか
教えて君はバカな日本人でFA
>>923 作業範囲、サービス品質などによってピンキリ
というか、そんなざっくり論を展開するような顧客の案件はどこも請けてくれない
要はビジネスに向いてないってことだ
テーブル数とページ数で分かるわけないだろw 中身で全然違う。 こんなとこで聞かないで、素直に開発会社に話持ってって見積頼めばええやん
その分だと設計も全然できなそうだから、テーブル決められてる分、高くなるわな。
こんなとこで聞くよりまともな開発会社に聞け まともな開発会社が分からないなら人脈使って探せ 人脈もないならビジネス失敗は確定だからさっさと手を引け
どうせデザインもないんだろうし、サーバ構築コミで50なんてあり得ないだろw 学生バイトに頼むなら分からんでもないが
933 :
nobodyさん :2011/10/28(金) 14:31:41.71 ID:F7F0tBhs
そこそこ時間のかかるバッチ処理中に全てのリクエストが工事中ページに向かうようにしたいのですが、 .htaccess 書き換え以外に rails で完結する方法はありませんでしょうか?
ApplicationControllerにbefore_filter入れてどっかにリダイレクトか、routes書き換え。 ほんとはApacheの設定とかで飛ばした方が良いけど。
>>936 ありがとうございます。
routes 書き換えは routes.rb をそのまま置き換え/書き換えという認識であっていますでしょうか?
先頭で全部のアクセスをどっかに飛ばして、次の行でreturnかなと思ったけど、今のroutesだとあれだから、やっぱりフィルタが良いかも。
命名規則についての質問 @ユーザー情報のメインテーブル(Mains) Aユーザー情報のサブテーブル(Subs) Bユーザーの投稿ポストテーブル(Posts) の3つがあるとして Aサブテーブル(Subs)のNameカラムにユーザー名が格納。 その場合 Subsのmain_idがMainsのidに繋がって モデルは↓ Mains has_one Subs Subs belongs_to Mains になると思うんだけど Postsからユーザー名(ASubsのName)を引っ張り出すときは Postsのsub_idとSubsのidを繋げばいいですか? それとも Postsのsub_idとSubsのmain_idを繋ぐべき? 結局のところ Subsの id = main_id だから、どちらでもいいんだろうけど どういった作り方が普通なのか気になります。
そのメーブル名は良くないけど、それはおいといて。 ショートカットという意味でPostにsub_id持つのは構わないけど、あまりやらないかな。 Postにはmain_id持たせてるから、そこから辿る。それだとこんな感じ。 Post.where(なんちゃら).includes(main: :sub) で、個々のpostから名前をviewとかで引くなら、 post.main.sub.name みたいになって長いから、Mainで:nameをdelegateする。 delegate :name, to: :sub そうすると post.main.name と書ける。 もっと短くしたければ、またdelegateするなりメソッド足して工夫して。 上とは別に、省エネするなら、Postにattr_accessor で:name 足して、find_by_sql なりで引いて来る。この場合はincludes()しなくて良くなる。 post.name 使えるはず。
とことん教えて君は文章に特徴があるからすぐにわかるな
>>941 何と戦ってるんだ?
現実世界で嫌なことあったか?
>>940 細かく説明してくださって
ありがとうございました。
やってみます。
>>942 ここはRails全般のスレ。
質問に回答するもしないも見ている人達次第。
そいつは誰にも相手にされてないようだし、
罵倒するレスしかつけられない生産性のない可哀想な存在だから
相手にしないほうがいい。
年月日は分けない方が良い
>>946 教えて君は何でも教えて教えてだな
身の程をわきまえろ
小学校からやり直せ
>>945 おいおい あまりイジめてやるなw 他の人みたくスルーが一番
>>946 routes.rb はがっつりいじるもの
何でも resources でやろうとするのは何でも scaffold でやろうとするようなもん
>>946 仮に resources などで簡潔に書きたいと思ってるなら、Rails の敷いたレールの上を
走るようにすればいい
今回のようにURL設計でレールから外れようとしているのに、それでも簡潔さを求める
のはRailsの根本思想からはありえないことです
ある意味、Railsは宗教です
DB設計にせよURL設計にせよMVCにせよ、「こうするべき」という教義を持っており、
教義に従う人にだけメリットを与えます
そこから外れたいなら相応の労力が必要なことに文句を言ってはいけません
952 :
nobodyさん :2011/10/29(土) 18:06:24.81 ID:I8tdw7a2
to_param なんていうメソッドもあるけどね。
まあ、多少railから外れたこともだいたいプラグインがあるけどな。
>>951 横だけど、なんだか色々合点がいった。
ちょっと外れようとすると色々面倒なのはある意味じゃ仕様なんですね。
大したこだわりじゃないなら素直にレールに乗ってたほうが結果的に得しそうだ。
955 :
946 :2011/10/30(日) 02:00:21.85 ID:???
>>947 いろいろありまして。
>>948 お元気そうで何よりです。
>>950 なるほど。
scaffoldはだいたい目に見えるからいじりやすいんですが、
routesの方は見えないところで動いてる部分が多くて。
956 :
946 :2011/10/30(日) 02:02:32.00 ID:???
>>951 すごいわかりやすい!
すると、今回の場合は自分で自分用のrailを敷き直す覚悟が必要そうですね……。
サンスコ、頑張ってみまする。
>>952 おお、to_paramよさそうですね。
validates_format_ofと組み合わせて使おうと思います。
レールには従ってもいいし、従わなくてもいい。 分からなければ従っておいた方がいい。
>>955 > routesの方は見えないところで動いてる部分が多くて。
だったらテストをしっかり書こうよ
>>956 > すると、今回の場合は自分で自分用のrailを敷き直す覚悟が必要そうですね……。
そんな覚悟を固めるより、設計に口出す方が楽だよ
少なくともRails開発者が押し付ける教義は非常に多くの優秀な人たちののレビューを
通ってきているわけだから妥当性は相応に強い
逸脱することによるメリットがどれほどのものか?ってのをよく考えればいいわけか。
961 :
946 :2011/11/01(火) 03:34:44.77 ID:???
>>958 趣味で作ってるだけなので、設計者=実装者です。
とりあえずrailに乗っかった形で一度完成させてから、あれこれいじる事にしました。
application.js.coffee.erbとか、拡張子長すぎだろ それにjsファイルの中でerbを使うとかうぜぇ!
使わなければいいだけの話
ActiveRecord で悲観的ロックを使おうと考えています。 ロックがかかっていなければ更新処理→検索処理、 かかっている場合は更新が終わるのをまって(そして自身の更新はスキップして)検索処理としたいのですが、 ロックがかかっているかどうか調べるにはどうしたらよいのでしょうか? if ( ロック中か?) do # ロック解除されるまで待つ/更新処理はしない LockTable.find(1, lock => true).lock! false else locked = LockTable.find(1, :lock => true) # 幾つかのモデルにまたがる更新処理.... locked.lock! false end # モデル内容の検索処理...
>>962 .js は省けた気がする
あとerbにするのは確かにうぜえので変数的なものは
headタグ埋め込んで参照するようにしてるわ。
DBからのレスポンス待ちになっているのが lockによるものなのか、 単に負荷で遅くなっているか等を識別する手段は無かったと思う(DBレベルで)。 ただ、Oracleなんかは 読取lockの待ち時間を設定できて、 その時間を超えた場合は、例外を戻すように出来るので、 それをRails側でキャッチしてゴニョゴニョすることは出来るかも。 for update nowait なら、全く待たずに例外投げられるので それを利用して、ロック中である、と識別させる手もある。 lock("for update nowait") と書けばいい。 ただMySQLは、v4系列までは読取lockの待ち時間は設定できないし、 nowaitオプションもなかった気がする。単にグローバルな「待ち時間」で 制御するしかないけど、これだとサーバが負荷のせいでレスポンス待ちなのか、 lockのせいなのか等の識別は出来ない。v5はどうだか分からない。
>>966 回答ありがとうございます。
なるほど、ここら辺はDB依存になる部分なんですね。
バックエンドがMySQLでして、グローバルなオプションの変更はちょっと影響範囲の判断がつかないので
今回は違う方法を考えてみます。
それほどクリティカルな処理の部分ではないのと、どちらにしろロック待ちはするということで
前回の更新処理時刻+n秒以内なら更新処理スキップみたいな感じでいこうと思います。
>>967 教えて君はとことん教えてだな
小学校からやり直してこい
本人、乙
教えて君の文章には特徴があるから すぐ分かるんだな
CentOS 5.6
ruby 1.8.7
gem 1.3.6
Rails 3.1.1
rails generate migration CreateTables
とすると、
/usr/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/execjs/runtimes.rb:47:in `autodetect': Could not find a JavaScript runtime. See
https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
from /usr/lib/ruby/gems/1.8/gems/execjs-1.2.9/lib/execjs.rb:5
from /usr/lib/ruby/gems/1.8/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
from /usr/lib/ruby/gems/1.8/gems/coffee-script-2.2.0/lib/coffee_script.rb:1
from /usr/lib/ruby/gems/1.8/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require'
from /usr/lib/ruby/gems/1.8/gems/coffee-script-2.2.0/lib/coffee-script.rb:1
from /usr/lib/ruby/gems/1.8/gems/coffee-rails-3.1.1/lib/coffee-rails.rb:1:in `require'
from /usr/lib/ruby/gems/1.8/gems/coffee-rails-3.1.1/lib/coffee-rails.rb:1
from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
from /usr/lib/ruby/gems/1.8/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `require'
などなど、、、、、
というエラーが出るのですが、検索してみたのですが、対処方法かせわかりません。
詳しい方、教えていただけないでしょうか?
rubygemのバージョンを最新にしろ いくらなんでも古すぎるんじゃないか 話はそれからだ
ruby 1.8.7もオワコン。Rails 3.1.1使うなら既存システムのメンテじゃないんだろうし。
centosに最初から入っているもので rails3.1をいれたんだろうな これに限らず、後方互換性がクソだから常に最新について行く根性が一番重要 初心者お断りって感じだ
教えて君みたいな人はここにくる前に参考書を買って一年間熟読してから来い
本人、乙
おまえ自作自演の意味わかってないだろ
require スルースキル
Ruby on Railsにはホットデプロイはありますか?
ないけど困った事はない。 どうしてもというならjruby使えば良い
Asset Pipelineについて質問があります。 デフォルトですと、rails g controllerした際にjsとcssが assets/javascriptsとassets/stylesheetsに出来るかと思われますが、 application.jsとapplication.cssのrequire_tree . によって 全てのcontrollerに対するファイルが1つに連結されてしまいます。 Asset Pipelineの目指すところからすれば1つにして request 数を減らすのは当然ではありますが、 controller毎に読み込むjsとcssは異なる、特にcssについては異なる方が多いかと思われます。 controller毎に読み込むものを分けるためには、require_tree . を削除し、欲しいものをinclude_tagなりlink_tagで呼ぶしかないのでしょうか。 そうして欲しい場合、require_tree . がデフォルトで存在し、 かつassets/javascriptsとassets/stylesheetsに自動で生成される理由は何でしょうか。
>>988 コントローラごとに分ける必要性よりリクエスト回数を減らすメリットの方が大きいって
ことなんだろうな
css を全部読み込んだ場合でも、コントローラごとに分けられてるようにすることは
難しくないし
・id や class に必要に応じてコントローラ名をつける
・application.html.erb の body にコントローラ名クラスをつける
んで、css 内で、body.<コントローラ名> 配下に内容を書く(scss なら楽勝でしょ)
みたいにね
(ちなみに俺は前者を使ってるが特に問題になることはない)
>>989 返信ありがとうございます
仰る通り、恐らくそれが最良であるとは思います。
しかし、scaffoldで生成されるstylesheetなどは何も考えずにただ各要素について書かれていますし、
一体どのようにcontroller毎に分けることを意図して設計されているのかが気になって仕方がありません。
設計思想など知った事ではないから直接英語で聞いて来いと言われてしまえばその通りな訳ですが・・・
皆さんがどのようにして分けているのかを知りたくなった次第です。
>>990 scaffold なんかサンプルだ
アテにすんな
>>991 なるほど、そんなもんですかね
ありがとうございました
デフォルトscaffoldっていつまで経ってもクソなままだよねえ 誰も使ってないんだろうけど
>>993 せっかくだからお前の理想のscaffoldを語ってけ
collection_selectくらいは使って欲しいね
996 :
nobodyさん :2011/11/03(木) 18:30:57.35 ID:wtiwNMId
いやいや、以前は for を使っていたのが each になったくらいの進歩はしているぞw
u
m
e
梅
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。