Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

rails/ruby

postgres インストール後に行うセットアップ for rails

$ pg_ctl -D /usr/local/var/postgres start && brew services start postgresql $ psql postgres # create role myuser with login password mypass; # alter role myuser createdb; # \q; ruby用の環境変数 DATABASE_URL=postgres://myuser:mypass@{hostna…

apple-touch-icon.png 読み込みエラーの抑制

safariでrailsで作ったサイトにアクセスした時に、railsのログにapple-touch-icon.pngが読み見込めないエラーが出ている。 このエラーを抑制するにはrailsでfaviconファイルがあるフォルダpublicに0バイトのapple-touch-icon.pngを置けば良い。 $ touch appl…

rails ログインのintegration testで失敗する原因

railsでログインのintegration testでCSRFエラーが出て、テストに失敗する。 ブラウザから実行した時はエラーにはならない。 延々、原因が分からず、かなり遠回りした結果、原因が判明した。 1) .bash_profileにRAILS_ENV=developを設定していると、rake tes…

rails 文字列に対するpresent?

nil? empty? はrubyのメソッドですが、 present? blank? はrailsのメソッドです。 文字列に対しては以下のようになります。 $ rails console Loading development environment (Rails 4.2.2) irb(main):001:0> a = nil => nil irb(main):002:0> b = " " => "…

rails ネストしたリソースのscaffoldを作る

ネストしたリソースのcontrollerやviewの書き方が分からなすぎるのでどうしたらいいものかと思ったら、そのものズバリ、ネストしたscaffoldを作るgemがありました。 GitHub - amatsuda/nested_scaffold: Nested scaffold generator for Rails 4.2 and 5 これ…

rails 基礎知識

railsは細かい部分の仕様の説明が明快に行われているドキュメントがない。トライアンドエラーで得た知見をメモしておく。 hoge.html.erb内で使えるクラスのインスタンス変数(@hoge,@fuga等)はコントローラークラスのインスタンス変数である。モデルクラスの…

Twitter Omni Authで401 Authorization Required

OSX 10.11.5 rails 4.1.1 development Perfect Ruby on Railsの6章を写経したら、twitterのOmniAuthが動かない。 散々悩んだ挙句、twitterのWebsiteを http://127.0.0.1:3000/ Callback URLを http://127.0.0.1:3000/auth/twitter/calback に変更し、ブラウ…

railsアプリをunicornでCentOS7のsystemdで立ち上げる時のサービスファイルの書き方

/etc/systemd/systemにalpha.serviceというファイル名で以下の内容を作成する。ファイルに実行権限は不要。 どこか間違っている、過不足等いっぱいあるかも。またアプリはalphaというUnixユーザーで実行するようにしている。 railsバージョンは4.2.2 Databas…

rails mysqlで絵文字がDBに入る場合の注意

railsにてfixturesをloadしようとして次のようなエラーが出た。 ActiveRecord::StatementInvalid (Mysql2::Error: Incorrect string value: '\xF0\x9F\x98\x83\xE3\x81...' for column どうやら、UTF8で4バイトになる絵文字が入っているところでエラーになっ…

ruby BCryptダイジェスト

BCryptのrawハッシュ値(データベースのpassword_digestに入る文字列)は以下の4つを$で区切った文字列である。 @version, @cost, @salt, @hash 例えば、 "$2a$10$PqSI0YWw/JHk2zKWRF1ol.5pRtgJKPsJqJa8pvIn4IzatuxY.SPmu" をsplit('$')すると ["", "2a", "10…

ruby コマンドメモ

$ bundle open {gemname} でgemのソースが入ったフォルダをvimで開く 例えば、私の環境で $ bundle open crypt とすると、 vimのnetrwで "~/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/bcrypt-3.1.11" のフォルダが開かれる。

ruby 文法その5

class HelloWorld attr_accessor :name end セミコロンが付いていて、シンボルになっているのがミソ。 これは、以下のように書くのと同じ class HelloWorld def name @name end def name=(value) @name = value end end ここで@nameはインスタンス変数 引数…

ActionController::RoutingError (No route matches [GET] "/assets/application-XXX

production環境でこんなエラーが出た。 rake assets:precompileはしてあるんだけどまだ何か足りないっぽい。 私の環境はnginx + unicorn + rails4なんだけど、 nginxではstaticルート設定してないので、rails側でserveする設定にしないといけないようだ。 co…

RubyMineからMacVimを起動する設定追加手順

Preference - Tools - External Tools で+ボタンを押す。 Nameに「MacVim」と入力する。 Programに「/Applications/mvim」と入れる。 Parametersに「 +$LineNumber$ $FilePath$」と入れる。 Working directoryに「/Applications」と入れてOKを押す。 これで…

OpenSSL::SSL::SSLError

railsアプリがなんか次のような500エラーを吐くようになった。 OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read finished A: unexpected message) 外部のサーバにhttpsでアクセスしているところで出ているっぽい。 サーバのnginx.…

rails redirect_to model

redirect_to modelの形がよく出てくるけど、いまいちドキュメントに例が載ってなくて分からない。StackOverFlowに回答が載っていた。 what does redirect_to(@model) means in rails? - Stack Overflow @userがUserモデルのid=1のインスタンス変数の場合 red…

ruby文法その4

演算子の優先順位 (高) ! ~ ** * / % + - << >> & | ^ > >= < <= == != && || .. ... ?: = not and or (低) <と&&では<のほうが優先順位が高い。なので次の結果は納得できるだろう。 irb(main):001:0> num = 1 < 2 && 5 5 irb(main):001:0> num = 1 > 2 && 5…

ruby文法その3

前回のソースコードをもう少し見ていきます。 少し変更して次のようにしてみるとどうなるでしょうか? # MyMathModule.rb module MyMathModule def plus(x, y) x + y + (@something || 0) end end # MyApp.rb require './MyMathModule' class MyApp include …

ruby文法その2

Moduleの使い方。 ディレクトリにMyMathModule.rbとMyApp.rbの2つのファイルを作成してみる。 # MyMathModule.rb module MyMathModule def plus(x, y) x + y end end # MyApp.rb require "./MyMathModule" class MyApp include MyMathModule end myapp = My…

rbenvコマンドメモ

過去の記事と内容かぶっている気がするが、とりあえず書いとく。 インストールされているrubyのバージョンリスト表示 $ rbenv versions system 1.9.3-p484 * 2.0.0-p247 (set by /Users/pebble8888/.rbenv/version)

指定のrails バージョンをインストールする

例えばrails 4.0.0をインストールする場合 gem install rails -v 4.0.0

Yosemiteにアップデート後bundle updateがコケる

YosemiteにOSをアップデートしたあと、bundle updateしたら、 fatal error: 'string.h' file not found となりjsonのインストールがこける。 Cのコンパイルで失敗しているようだが、標準インクルードファイルのパスが通っていない模様。 以下のコマンドで解…

rails で各コントローラー毎のcss,jsを読み込むようにする。

ほぼ参照サイトままです。 やったことは、3つ app/views/layouts/application.html.erb に以下の2行を追加。 <%= stylesheet_link_tag controller.controller_name, media: "all" %> <%= javascript_include_tag controller.controller_name %> app/assets…

ruby 複数のクラスに共通のメソッドを追加する

共通のモジュールを作成し、使用したいクラスにMixInする。 action_util.rb module ActionUtil def shake(x) print( "shake #{x}!" ) end end cafe.rb require './action_util' // この./はrails内では必要ない class Cafe include ActionUtil def serve sha…

railsでturbolinksを無効にする

Gemfile からturbolinksをコメントアウト # gem 'turbolinks' 2. bundle installし反映する。 3. app/views/layouts/application.html.erbから "data-turbolinks-track" => true の項目2つを削除する。 4. app/assets/javascripts/application.jsから //= r…

rails メモ

ログ出力 var = "World" logger.debug "Hello #{var}" bundleは bundle installと同じ意味である rails dbconsoleでmysqlにログインすればuse developmentされた状態になる routes確認 rake routes newアクション 新規登録画面を表示する(APIの場合は不要) c…

ruby文法その1

rubyはたまにしかいじらないので、いつもすぐに思い出せないrubyの文法をメモしておく。 複数行コメント =begin, =end 文字列にデータ埋め込み "Hello#{var}" if文 if a > 10 elsif a == 10 else end 真偽値 false:nilとfalse true:上記以外 ||演算子と&&演…

rails ルーティング

config/routes.rbファイルに Wordhoard::Application.routes.draw do resources :users end のようにresourcesと複数形で書いた場合 UsersControllerクラスに対して、 index GET show GET new GET create POST edit GET update PATCH/PUT destroy DELETE の…

uninitialized constant SessionController

rails でこのエラーが起きたときはどこかのスペルが間違っていることを意味する。 SessionControllerを呼び出そうとしていることは分かるが、通常セッションコントローラーの名前は SessionsControllerである。つまり、どこかで間違ってsessionsと書くべきと…

ruby gemソースフォルダをvimで開く

ruby gemソースフォルダを開くには ~/.bash_profile に export EDITOR=vim とエディタ変数を設定し、 $ gem open {gem名} とすればいいようです。 [追記] $ gem open rails ERROR: While executing gem ... (Gem::CommandLineError) Unknown command open 上…