地方でリモートワーク in Iwate

東京の受託開発会社でリモートワークしてます。

Railsでソースコードの変更が反映されなかった

スポンサーリンク

f:id:ihatov08:20160928222748j:plain

Railsでソースコードの変更が反映されませんでした。

単純にそういう設定にしていたから

今日から新しいプロジェクトにアサインしました。 環境構築がサクッと終わり、いざコーディングをしてもソースコードの変更が反映されませんでした。vagrantを再起動すると反映されるのですが、毎回再起動するわけにもいきません。 nginxが原因なのか、はたまたunicornが原因なのか? 原因究明にかなり時間がかかりました。 結局、Railsの設定ファイルに以下の記述があったので、変更のたびにunicornの再起動が必要のようです。

config.cache_classes = false

Rails アプリケーションを設定する | Rails ガイド

ここら辺もすぐにわかるようになりたいです。 なんとなく勘をつけて、設定ファイルを見るようになりたいです。 毎回unicornの再起動も面倒なので、rakeファイルでコマンドを作成します。 これでrake unicorn:restartでunicornを再起動できます。

# lib/tasks/unicorn.rake
# Unicorn コマンドタスク
# rake unicorn:start
# rake unicorn:stop

namespace :unicorn do
  ##
  # Tasks
  ##
  desc "Start unicorn for development env."
  task(:start) {
    env = ENV['RAILS_ENV']
    if env.blank?
      env = 'development'
    end
    config = Rails.root.join('config', 'unicorn', "#{env}.rb")
    sh "bundle exec unicorn_rails -c #{config} -E #{env} -D"
  }

  desc "Stop unicorn"
  task(:stop) { unicorn_signal :QUIT }

  desc "Restart unicorn with USR2"
  task(:restart) { unicorn_signal :USR2 }

  desc "Increment number of worker processes"
  task(:increment) { unicorn_signal :TTIN }

  desc "Decrement number of worker processes"
  task(:decrement) { unicorn_signal :TTOU }

  desc "Unicorn pstree (depends on pstree command)"
  task(:pstree) do
    sh "pstree '#{unicorn_pid}'"
  end

  def unicorn_signal signal
    Process.kill signal, unicorn_pid
  end

  def unicorn_pid
    begin
      env = ENV['RAILS_ENV']
      if env.blank? || env == 'development'
        File.read("/tmp/unicorn.pid").to_i
      elsif env == 'staging'
        File.read("/home/nowall.inc/current/tmp/pids/unicorn.pid").to_i
      elsif env == 'production'
        File.read("/home/deployer/current/tmp/pids/unicorn.pid").to_i
      end
    rescue Errno::ENOENT
      raise "Unicorn doesn't seem to be running"
    end
  end

end