読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

'twitter-bootswatch-rails'でbootswatchにあるテーマを使う

Bootswatch: Free themes for Bootstrapbootswatchにはbootstrapをちょっと格好良くできるテーマ集です。 色合いの変更が主なので、使用感を変えずに使うことができます。 railsでコレを使う場合は、generatorつきの 'twitter-bootswatch-rails'という便利ge…

/var/www/RAILSAPP/publicにindex.htmlを置くもの、全ての希望を捨てよ あるいは、passengerにおける処理解決順について

試験が終了したrailsアプリ(myapp)を、本番環境のpassengerで稼働させる簡単なお仕事をしていました。Installing Passenger + Apache on Ubuntu 14.04 LTS (with APT) on a Linux/Unix production server (part 2) - deployment walkthrough with Ruby, Pass…

自前鯖のrails4のアプリをproduction環境で稼働させる

今日は自前鯖のrails4のアプリをproduction環境で稼働させる方法の話です。実はHerokuみたいな環境の記事は書いた事があります。 shuzo-kino.hateblo.jpただ、自前鯖だとデータベース等々で手を動かさないと駄目なトコも多いです。 普段人任せか自動化スクリ…

railsstrapのdatepickerをつかう

railsstrapはtwitter-bootstrapをヨロシク使う以外にも、色々便利な拡張がついてきます。 今回はその一つ「datepicker」について扱います。 実際のところ これまで、泥臭くdate_fieldとcss芸で対処していた所を、date pickerで実装し直すケースを考えます。 …

evalで動的にメソッドを追加する(その4)Railsのform初期値をHelperに突っ込む

以前の記事ではviewでevalを呼び出してやる方式を試しました。 shuzo-kino.hateblo.jp前回のような全部のせメソッドで内部的に切り替え……でもよいのですが、 今回は、class_evalとdefine_methodをつかって、用途にあったメソッドを生成する方法を考えます。 …

date_selectで(やや古風な)日付選択欄をつくる

date_selectはRailsの初期の頃から実装されていた、formタグの一つです。 名前の通り、日時の入力に特化したタグで力技でoptionのフォーム生成をやってくれます。 実際のところ formで生成するときは、以下のようにします。 オプションの意味は公式ドキュメ…

【自習メモ】railsのmatchの挙動

私のようなRails若葉マークにとって、matchメソッドは救いの女神です。 雑に書いても、雑に補足してくれます。 とは言え、規模が大きくなってくるとそうも言っていられなくなります。 今回は、そんなこんがらがった糸を解す過程のメモです。 実際のところ HT…

twitter-bootstrap-railsからrailsstrapへ移行するときは、念のためrails dで環境を綺麗にしておいた方が良い

railsstrapはtwitter-bootstrap-railsの互換gemです。 特に、font-awesomeまわりの挙動が、デフォルトで組み込まれている分、前者より安定している印象があります。 基本的挙動は同じですが、若干違うため多少の注意は必要です。 特に、DatePickerなど本家で…

RoRアプリの再構築が上手く行かない場合、"rails g"が必要なgemが原因かもしれない

過去に担当したRoRシステムの手直しをすることになりました。 スクリプトを見るのは、実に一年半ぶり。 "rails s"すら忘れているレベルで現場から離れていたので、今回の記事みたいな有りがちな事も忘れてました。 実際のところ 以下のモノを適用しているシ…

gem「view_source_map」で、Render元のファイルをViewに表示する

view_source_mapはViewにRenderもとのContollerファイル名を記載してくれる便利Gemです 使い方 特になんの工夫もなく、rails sしてあげれば <p>test</p> てな感じで展開されます。 ソースをみると、Railtie自体に細工をする事でこの魔法が実現されているようです……

Railsのbundle installで突っ込んだgemの配置先をみる

Railsのbundle installで突っ込んだgemの配置先をみるには 「bundle show」です。 $ bundle show sass /Users/shuzo_kino/.anyenv/envs/rbenv/versions/2.1.5/lib/ruby/gems/2.1.0/gems/sass-3.4.13また、半端に入力しても $ bundle show sas 1 : sass 2 : s…

mオプションでRailsプロジェクトの生成テンプレートを使う

「-m」はrails newの際、gist等々に放り込んだレシピに従ってあれこれしてくれるオプションです。 こんな感じで使います。*1 $ rails project_name -m <https://gist.github.com/banker/219223/raw/>生テキストでないと読み込まないので注意してください。 できること テンプレートの記述にはUNIX系コマン</https://gist.github.com/banker/219223/raw/>…

Railsをデーモンで動かす

Railsアプリはデーモンとして起動する事ができます。 やり方は簡単で $ rails s -dと、オプションを一個つけるだけ。とはいえ、これだけだとデーモンらしく動かすのは至難の技なので mirasrael/daemons-rails · GitHub や resque/resque at 1-x-stable · Git…

railsでActiveRecordを使いたくない場合

RailsはデフォルトでActiveRecordというORMがついてます。 ただ、軽い個人的プロジェクトで使うような場合などです。 また、Mongoidを使いたい場合はそもそも取り除く必要があったりします。今回はそういった場合の対処法です。 方法 rails new myapp --skip…

railsで特定の[ファイル|行]だけspecを走らせる

railsでspecをやる場合 $ rake specがありますが...これ、全部実行してくれるので一寸不便です。 一個だけファイルをテストしたい場合はSPEC変数に設定したげます。 $ rake spec SPEC=spec/controllers/hoges_controller_spec.rb更に、特定ファイルの特定の…

railsにでてくるclass_optionなるものの正体

submitでモデルから挙動を判定してくれるアレですが... 3.0からの機能のようですね。 これで使われているのがclass_optionなるものに記録されたmodel名です。 実装をみたところBaseクラスに対してmethodを定義してあげているだけ...でした # File railties/l…

submitの挙動はモデルが保存済みかどうかで決まる

formタグのsubmitは対象モデルが保存済みかどうかを読み取りに行き、 自前でcreateかupdateかを判定してくれます。 確認フォームのような画面を実装する場合、この点を意識しないと勝手にupdateになって詰みます。*1この魔法を実現している部分がこちら ## l…

form_forの中でrenderを使いたい場合localオプションで指定する

form_forの中でrenderを使いたい場合、localオプションで指定します。まず、大元のページで <%= form_for(@picture) do |f| %> <div class="field"> <%= render :partial => "page_1", :locals=>{:f=>f} %> </div> <% end %> こうすれば、render先のファイルでもform_forのブロック…

strong_parameterで安全にparamを渡す

carrierwaveの自動生成スクリプトをみてたらこんな記述が... # Never trust parameters from the scary internet, only allow the white list through. def picture_params params.require(:picture).permit(:image) end これはstrong_parameterという奴で、…

database.ymlにdotenvの値を導入したい場合erbの記法を使う

複数人でアプリ開発をしており、 既に各々データベースの環境を構築してしまっている時にはこれが便利です。 gem 'dotenv-rails'を追加して ".env"に MYSQL_PASS="password"とやった上で development: adapter: mysql2 encoding: utf8 reconnect: false data…

evalで動的にメソッドを追加する(その3)__Railsのformをevalで追加する

evalは文字列をスクリプトとして解釈して実行するKernel所属のメソッドです。 これを活用すると、似たメソッドを延々と生成する愚を犯さずに済みます。 更に、文字列を生成して評価する形式であるため、変更に対しても柔軟です。 実際の所 helperに def choo…

link_to_ifという便利な子について

<%= link_to_if(user_signed_in?, "編集", edit_hoge_path(@fund), class: 'btn') %> とやれば、deviceでサインインしている場合*1リンクを表示、 なければただの文字列を表示します。非ログイン時に何も表示したくない場合は空のブロックを渡します。 <%= l…

sendメソッドでオブジェクトの付属メソッドを実行できる

Objectクラスに付属しているsendメソッドは、引数に文字列かシンボルを与えてやると同名のメソッドを引っ張り出してくれる凄い子です。 %w(pop push slice).send(:to_s) #=> "[\"pop\", \"push\", \"slice\"]" 引数つきで実行する事も当然可能です。 %w(pop …

link_toのアレコレ

link_toとやる場合、よくある記法だと <%= link_to "新規作成", :controller => "pages", :action => "new" %> ですが、railsは賢い子なので <%= link_to "新規作成", new_page_path %> とやってあげると、pageコントローラーのnewメソッドを呼び出してくれ…

rails cをリロードする

rails cを使うと、わざわざブラウザを使わなくともメソッドの挙動lを検証をする事ができます。 ただ、実行中にmodelを弄っても反映してくれません。弄った結果をすぐ反映したい場合は >> reload! とやればよいです。 これで毎度毎度rails cとやらずとも同じ…

rake db:resetではschema.rbから復旧が行われる

今迄無批判に $ rake db:migrate:reset $ rake db:resetとしていました。 これでDBを弄りつつseedを配置していた訳ですが... Engineをmroongaに設定したところ、今迄の手法が通じませんでした。 というのも、db:resetは 削除=>作成=>schema.rbから復旧と…

ActiveRecordのmigration時にSQLのエンジンを選択する

たとえば、検索エンジンにmroongaを追加したい場合は 既存のdb/migrationの当該ファイルにoptions: "ENGINE = mroonga"を追加します class CreateProfessors < ActiveRecord::Migration def change create_table :professors ,options: "ENGINE = mroonga" d…

Turnipのstep定義でidを指定したい場合

Turnipのstep定義でidを指定したい場合は、 findメソッドに:cssオプションを持たせて使います。 ## hoge.step step ":css_tag に :content が表示" do |css_tag, content| expect(find(:css, css_tag).text).to eq(content) end ## piyo.feature When "span#…

TurnipでもFactory Girlを使う(文章補強中...)

TurnipでもFactory Girlが使えます。 TurnipはCapybaraベースなので、当たり前とえば当たり前ですが #Gemfile group :test do gem 'factory_girl_rails' end ## spec/devise_steps.rb step 'ログイン' do FactoryGirl.create(:user) Capybara.app_host = "ht…

Github推奨のgitignoreをcurlで落として反映させる。

天下のGithubがgitignore集を公開しています。 https://github.com/github/gitignore CやらEagleなんかもあって眺めているだけでも楽しいリストです。さて、今回の記事ではこのありがたいノウハウ集からRails用のモノを頂戴する方法です。 以前書いた記事を…

Railsで三桁区切りの通貨表示をする

一々Rubyで文字列化するのも結構ですが..ここは楽しましょう。 <p>number_to_currency(fund.expence, :unit => "¥").</p> とやると、 ¥123,456.と出ます。 参考元。 http://railsdoc.com/references/number_to_currency

CentOS上に組んだRails4とRuby2.0をApacheで動かす件のメモ書き

...実際地獄でした。作業手順は参考もとに書いてある通りなので、 引っ掛かった所を中心にメモします 前提 Ruby 2.0.0p451 rbenv Rails 4.0.1 CentOS release 6.4 (Final) *1 32bit passenger-install-apache2-module済み mod_passenger.soが発狂する 私が受…

試作段階なら、rails g migration add_columnせずに直接createを弄る

rails g migarate ...とすると、db/migrateに20130101_create_hoge.rbといった感じのファイルが生成されます。ここに新規カラムを追加する場合、 $ rails g migration add_column_date_of_birth_to_students dateOfBirth:dateとすると既存のモノにカラムを追…

passengerを使うとApache環境下でRailsが動く

passengerというgemをつかうと、Apache環境でもRailsが動きます。 Rackやnginx、UnicornじゃなくてもRailsって動くんですね(今更さて、これには、apacheと連携して使う $ passenger-install-apache2-moduleというコマンドがついています。 実行したら実際礼…

rails4でprecompileが必要なアプリをherokuにアップロードする

rails4でherokuにアップロードしようとすると色々アレなようです。 今後アップデートが進むにつれて、これらの状況は改善される可能性があります。 production.rb herokuはデフォルトでprodoction.rbを設定ファイルとして呼び出します。 というわけで、preco…

deviseのbefore_filterで特定のアクションのみ制限をかける

deviseのbefore_filterは特定のアクションのみに限定対応も可能です。例えばscaffoldした子でshowのみをしたい場合、 当該コントローラ (RAILS_ROOT/app/controller/hoge_controller.rb) などで before_filter :authenticate_user!, only: [:new, :edit, :up…

既存のmodelにカラムを追加する

$ rails g migration add_column_#{カラム名アンダーバー区切り}_to_#{テーブル名} カラム名スネークケース:テーブル名という形で追加します。実例を上げると $ rails g migration add_column_business_state_to_companies businessState:integer invoke act…

(自習メモ)railsのselect_tagを使う

かれこれ2年ほど弄っておきながら、実はRailsを十分理解していない僕ですこんばんは。 今日はクリックするとプルダウンして選択肢が出てくるアレ「select」タグを扱います。 例 Model データを突っ込む部分なのですが...よく分かってません(白目 ともかく…

rails cとかいう子がいい具合にキモ便利

rails cはテスト用に一時的な初期値をぶっ込むときに楽です。 cはconsoleの略です irb(main):001:0> Player.find(1).food.update_attribute(:pt, 10_000) {略} => true 実行SQLが実行されます。 小ネタ やめる場合 irbと同様、exitで止められます。 irb(main…

paper_trailを使ってmodelの差分を扱う

paper_trailはActiveRecordの編集差分を取ってくれるgemです。 railsのみならず、sinatraでも活用できます。 使い方 例の如くscaffoldで叩き台を生成します。 $ rails new PaperTrailTest $ rails g scaffold Blog name:string user_id:integerGemfileに追記…

Rails製CRM、Fat Free CRMを日本語化してHerokuでお試し

Fat Free CRMはRails製CRM(顧客管理システム)です。 基本でもプロジェクトやら顧客管理やらに必要な機能が一通り揃っています。 また、プラグインによる拡張も可能であるため色々と遊び甲斐も。 内製ツールならこれで十分ですね。 作業環境 Git Heroku CLI…

seeds.rbを使って初期データを放り込む

今回はseeds.rbを使って初期データを放り込む方法について調べてみました。まずは、modleを生成、必要なフォルダを作成します。 rails g model measure time:timestamp device_id:integer value:integer rake db:migrate mkdir -p db/seeds/developmentつぎ…

新しいカラムを追加して、一括してデータを突っ込む

前回の記事にて引っかかった 「新しいカラムを追加して、一括してデータを突っ込む」の手順です。 データベースは素人なので、結構危ない橋を渡ってる気がします。今回は、 usersテーブルにroleカラムを追加 id = 1は"admin"、それ以外は"user"というデータ…

gem 'cancan'で楽に管理者権限機能を実装する

gem 'device'でログイン機能を追加したはいいものの、 デフォルトだと誰でもユーザ登録が出来て何かと不便な事があります。 (クローズドβとか)そんなときに役に立つのが、gem 'cancan'です。 今回のケースでは、既にdeviceが稼働しているシステムに権限を…

Ubuntu上にRoR環境を作る SQLite3がうまく行かないときのメモ

Ubuntu上にRoR環境を作ったときミスったので、メモ。 参照元の最初のページ、すっ飛ばしてRailsから入れようとしたところ…… Gem files will remain installed in /home/shuzo_kino/.bundler/tmp/3808/gems/sqlite3-1.3.6 for inspection. Results logged to …