困ったときのメモ ver.2.0

主に Ruby on Rails のメモ。など。

Vagrant の synced_folder 下で node_modules の更新がつらい件

vagrant で node_modules を別にインストールするようにして、 yarn install のストレスを軽減する

# 適当なディレクトリ作ってマウントしちゃうぞ! 
# (これ実行した後はホスト側の node_modules は更新されない。 from, to を逆にすると意味がない)
mkdir ~/vagrant_node_modules
sudo mount --bind ~/vagrant_node_modules node_modules
# 解除するぞ! する必要を感じないが。(これ実行した後はホスト側の node_modules が更新される)
sudo umount node_modules

better_errors が Vagrant で動かないときの対処

デバッグ用のgemとして以下を入れると便利です。

group :development do
  gem 'better_errors'
  gem 'binding_of_caller'
end

ただ、Vagrant環境下だとデフォルトのままではブラウザに出てきてくれなかったりして 困りましたが、ググったらいろいろありました。

Rails - better_errorsがvagrantで動作しない対処 - Qiita

が、Vagrantファイル書き換えたりとかイヤなので、
ちょっと考えみたら以下の記述で動きました。

config/environments/development.rb

BetterErrors::Middleware.allow_ip! "10.0.2.2"

サーバログに出てるもんね。

Rails4で作ったやつをHerokuに上げるときにやっとくこと

Gemfile

Rubyのバージョンを固定するなら書いとく。

rails newしたあとのデフォルトだとsqlite3がproductionでも有効になってしまうのでdevelopとtestだけに限定して、productionではpgを使うようにする。

あとrails_12factorもproductionで入れる。

source 'https://rubygems.org'
ruby '2.2.3'

gem 'rails', '4.2.3'
...
...他

group :development, :test do
  gem 'sqlite3'
  ...他
end

group :production do
  gem 'pg'
  gem 'rails_12factor'
end

Rubyのパス

Rubyのバージョンによってはスクリプト類が動いてくれないことがある。

binディレクトリ内のスクリプトRubyのパスを書いたマジックコメントがあるので、バージョン番号を削る。

(-) #!/usr/bin/env ruby2.2
(+) #!/usr/bin/env ruby

おしまい

とりあえずRialsチュートリアルとかやるときには、Herokuに上げる前にやっとくと吉ですね。

VagrantのRailsをWindowsのChromeでテストする

できたこと

仮想環境下のRailsを、ホストであるWindows側のブラウザでテストできるようになった。うれしかったのでメモ。
テストでもやっぱりブラウザで動いてるとこ見たいし。

ほとんど下記ページのコピペ。
Vagrant環境下におけるブラウザテストについて(Chrome編) | hifive開発者ブログ

環境

ホスト  : Windows7, Chrome
仮想マシン: Ubuntu, Ruby 2.2.3, Rails 4.2.3
rails-dev-boxのほぼデフォルト。3000番ポートはつないである。

作業手順

Rails

以下のgemを追加する。

minitest-rails
minitest-rails-capybara
selenium-webdriver

test_helper.rb に下記を追加する。IPアドレスの192.168.0.XXXはホストのIPアドレス

require "minitest/rails/capybara"

Capybara.javascript_driver = :chrome
Capybara.app_host = "http://localhost:3000"
Capybara.server_host = "0.0.0.0"
Capybara.server_port = 3000
Capybara.default_max_wait_time = 10
Capybara.run_server = true

Capybara.register_driver :chrome do |app|
  Capybara::Selenium::Driver.new app,
  browser: :remote,
  desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome,
  url: "http://192.168.56.1:4444/wd/hub"
end

server_hostを指定しておけばRails側でサーバ起動しなくても大丈夫だった。
192.168.56.1はVirtualBoxのHostOnlyアダプタ

ホスト

Selenium Server をダウンロードして適当なとこに置いとく。
Java Runtime がなければ入れる。
コマンドプロンプトで以下を入力して起動する。

java -jar selenium-server-standalone-x.xx.xx.jar

あとは・・・

ふつうにfeatureテストを作る。書き方はググる。js: trueってつけとけばブラウザ動く。
テストを実行すると、たぶんWindows側のChromeが動き出してくれるはず。。

やっほい!