2016年7月26日火曜日

【Rails5.0.0】 rails4.2.5からrails5.0.0にアップグレードする その3 capistranoの修正

記事概要

rails4.2.5からrails5.0.0にアップグレードした時の方法をまとめた記事です。
Gemと設定ファイルの修正は、この記事を参考にしてください。
この記事は、capistranoの修正方法について記載しています。

環境

  • centos6.5
  • rails4.2.5 → rails5.0.0
  • ruby2.3.0
  • rbenv
  • unicorn
  • capistrano3.2.1 → capistrano3.5.0
  • whenever

capistranoの実行

capistrano3.2.1でRails5.0.0をstaging環境にリリースします。

terminal

bundle exec cap staging deploy:check

以下のエラーが発生します。

terminal

NoMethodError: undefined method `on' for main:Object

deployできなくなっています。
capistranoのgit logを追うと、このバグは3.5.0で対応されているので、capistrano3.5.0に更新します。

Gemfile修正

Gemfileを修正します。

{project_folder}/Gemfile

gem 'capistrano', '~> 3.2.1'

↓

gem 'capistrano', '~> 3.5.0'

updateします。

terminal

// update
bundle update

アップデートに成功したら、config/deploy.rbを修正します。

{project_folder}/config/deploy.rb

lock '3.2.1'

↓

lock '3.5.0'

以上で修正は完了です。
deploy:checkします。

terminal

bundle exec cap staging deploy:check

正常にdeployが通ります。

その他

その他のcapistranoのdeployツールは正常に動きました。
私の環境では他に、

  • maintenance
  • sitemap
  • whenever

を利用していますが、問題ありませんでした。

導入方法は以下のリンク記事を参考にしてください。

まとめ

以上で、Rails5.0.0の移行作業は終了です。

ここではすでにRails6のアナウンスもされています。

Rails6までには、もっと他の効率的なフレームワークが出ていて欲しいですね。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年7月25日月曜日

【Rails5.0.0】 rails4.2.5からrails5.0.0にアップグレードする その2 Rspecの修正

記事概要

rails4.2.5からrails5.0.0にアップグレードした時の方法をまとめた記事です。
Gemと設定ファイルの修正は、この記事を参考にしてください。
この記事は、Rspecの修正方法について記載しています。

環境

  • centos6.5
  • rails4.2.5 → rails5.0.0
  • ruby2.3.0
  • rbenv
  • unicorn
  • capistrano3.2.1 → capistrano3.5.0
  • whenever

Rspecの起動

まずはRspecを動かします。

terminal

bundle exec rspec spec

179 examples, 62 failures, 4 pending

エラーだらけでまともに動きません。修正が必要です。

rails-controller-testingの導入

Rspecを実行すると、コンソールに以下が表示されます。

terminal

NoMethodError:
        assigns has been extracted to a gem. To continue using it,
                add `gem 'rails-controller-testing'` to your Gemfile.

`assigns` and `assert_template` have been remove and extracted to a gem in Rails 5. #1393

Rails 5では、assignsとassert_templateが削除されています。
Gemfileでライブラリを追加する必要があります。

{project_folder}/Gemfile

group :test do
  gem "rails-controller-testing"
end

installします。

terminal

cd {project_folder}/

bundle install

Installing rails-controller-testing 0.1.1

さらに、spec/rails_helper.rbに設定を追加します。

{project_folder}/spec/rails_helper.rb

RSpec.configure do |config|
  [:controller, :view, :request].each do |type|
    config.include ::Rails::Controller::Testing::TestProcess, :type => type
    config.include ::Rails::Controller::Testing::TemplateAssertions, :type => type
    config.include ::Rails::Controller::Testing::Integration, :type => type
  end
end

修正が完了したら、Rspecを実行します。

terminal

bundle exec rspec spec

179 examples, 0 failures, 4 pending
OK

動くようになりました。

まとめ

Rspecは、Railsのアップデートをするたびに動かなくなる印象が強いです。
なので、公式通りに、Minitestを使った方が保守性は高くなると思います。

次回は、capistranoとその他の修正方法について記述します。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年7月22日金曜日

【Rails5.0.0】 rails4.2.5からrails5.0.0にアップグレードする その1 Gemと設定ファイルの修正

記事概要

rails4.2.5からrails5.0.0にアップグレードした時の方法をまとめた記事です。

環境

  • centos6.5
  • rails4.2.5 → rails5.0.0
  • ruby2.3.0
  • rbenv
  • unicorn
  • capistrano3.2.1 → capistrano3.5.0
  • whenever

工数

全ての修正を含めて1日で完了しました。

作業内容

rails5.0.0のアップグレードでは、以下の作業を行いました。

  • rails5.0.0へアップデート
  • アプリのコード修正
  • Rspecの修正
  • capistranoの修正

移行用のbranchの作成

gitでrails5移行用の機能ブランチを作成します。

terminal

cd {project_folder}
git branch feature-rails5

checkoutでブランチを切り替えます。

terminal

git branch feature-rails5

準備完了です。

Gemfile修正

まずGemfileを修正します。

{project_folder}/Gemfile

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.5'

↓

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.0.0'

gem 'rails', '5.0.0'に修正し、updateします。

terminal

// update
bundle update rails

railsの変更だけの場合、私の環境では更新に失敗しました。
以下のようなエラーが表示されました。

terminal

Bundler could not find compatible versions for gem "railties":
  In Gemfile:
    coffee-rails (~> 4.1.0) was resolved to 4.1.1, which depends on
      railties (< 5.1.x, >= 4.0.0)

    factory_girl_rails (>= 4.1.0) was resolved to 4.6.0, which depends on
      railties (>= 3.0.0)

    jquery-rails was resolved to 4.1.0, which depends on
      railties (>= 4.2.0)

    rails (= 5.0.0) was resolved to 5.0.0, which depends on
      railties (= 5.0.0)

    rails-i18n (~> 4.0.0) was resolved to 4.0.8, which depends on
      railties (~> 4.0)

    rspec-rails was resolved to 3.4.2, which depends on
      railties (< 4.3, >= 3.0)

    sass-rails (~> 5.0) was resolved to 5.0.4, which depends on
      railties (< 5.0, >= 4.0.0)

    teaspoon was resolved to 1.1.5, which depends on
      railties (< 6, >= 3.2.5)

    web-console (~> 2.0) was resolved to 2.3.0, which depends on
      railties (>= 4.0)


Bundler could not find compatible versionsは依存関係のエラーです。
更新が必要なGemを順に切り替えていきます。

{project_folder}/Gemfile

gem 'coffee-rails', '~> 4.1.0'

↓

gem 'coffee-rails', '~> 4.2.1'

{project_folder}/Gemfile

gem "factory_girl_rails", ">= 4.1.0"

↓

gem "factory_girl_rails", ">= 4.7.0"

{project_folder}/Gemfile

gem 'rails-i18n', '~> 4.0.0'

↓

gem 'rails-i18n', '~> 5.0.0'

{project_folder}/Gemfile

gem 'sass-rails', '~> 5.0'

↓

gem 'sass-rails', '~> 5.0.5'

再度updateします。

terminal

bundle update 

bundle updateは、全ての依存関係をインストール・ダウンロードし直すことができます。

terminal

Bundle updated!

すべてのgemの更新に成功したら、updateの準備は完了です。

Upgrade to Rails 5.0.0

Gemファイルの導入が完了したら、rails app:updateで設定ファイルを更新します。

terminal

bundle exec rails app:update

ファイル更新の有無を聞かれるので、更新が必要なファイルのみ変更します。

  • config/boot.rb → 更新する
  • config/routes.rb → 更新しない
  • config/application.rb → 更新する
  • config/environment.rb → 更新する
  • secrets.yml → 更新しない
  • config/environments/development.rb → どちらでも良い(config.serve_static_filesを削除)
  • config/environments/production.rb → どちらでも良い(config.serve_static_filesを削除)
  • config/environments/test.rb → 更新しない
  • config/initializers/assets.rb → 更新しない
  • config/initializers/cookies_serializer.rb → 更新しない
  • config/initializers/wrap_parameters.rb → 更新しない
  • config/locales/en.yml → 更新しない
  • bin/rails → 更新する
  • bin/setup → 更新する

以上で完了です。

Rails5.0.0起動

設定ファイルの修正が終わったら、アプリを起動します。

terminal

rbenv exec bundle exec rails s -b 0.0.0.0
=> Booting WEBrick
=> Rails 5.0.0 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2016-07-15 16:52:59] INFO  WEBrick 1.3.1
[2016-07-15 16:52:59] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2016-07-15 16:52:59] INFO  WEBrick::HTTPServer#start: pid=21885 port=3000

コンソールにRails 5.0.0 applicationが表示され、画面が表示されれば成功です。

あとはWEBを動かしながらdepressionメッッセージをつぶしていきます。 今後非推奨となる処理は、コンソールにdepressionが表示されます。 そのままでも動作するのですが、5.1.0で動かなうなるので、治せる箇所は今のうちに修正しておきましょう。

まとめ

Rails3からRails4にアップデートするよりは、素早くアップグレードできます。
もちろん、導入しているライブラリ次第ですが、随分と洗練されたという印象です。

この記事の通り、本番でautoloadができなくなっているので、バッチを利用している人は注意してください。
次回は、rspecの修正方法について記述します。

以上です。

追伸:この記事が600本目の記事です。
今後もよろしくお願いします。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年7月21日木曜日

【Rails5.0.0】 Rails4.2.5からRails5.0.0へのアップグレードでバッチが動かなくなった

  • 最終更新日:2016年07月23日

記事概要

Rails4.2.5からRails5.0.0にアップグレードしたら、既存バッチが動かなくなりました。
そのエラーの修正方法を記述した記事です。

環境

  • rails5.0.0 & centos6.5
  • ruby2.3.0
  • rbenv
  • unicorn
  • whenever

事象

Rails4.2.5からRails5.0.0へのアップグレードで、バッチが動かなくなりました。
バッチは、


{project_folder}/lib/task

に配置して、config/application.rbに


# bacth
config.autoload_paths += Dir["#{config.root}/lib"]

を記載して、クラスをオートロードしてwheneverで動かしていました。

原因

Rails5.0.0では、production environmentでboot後にautoloadingが行われなくなったためです。
こちらのgitログに変更コードとコメントが記載されています。

Autoloading of classes is now disabled in production environment by default.
If your code is dependent on autoloading in production, then you can opt out by setting `Rails.application.config.enable_dependency_loading` to true.

訳すと、

クラスのAutoloadingは、今、本番環境ではデフォルトで利用できません。
もし、アプリでAutoloadingを有効にしたいのなら、Rails.application.config.enable_dependency_loading = true
を設定してください。

なので、本番でオートロードでバッチを動かすためには、config.enable_dependency_loading = trueの設定が必要になります。

修正方法

config/environments/production.rbに以下の処理を追加します。

{project_folder}/config/environments/production.rb

  # autoloading
  config.enable_dependency_loading = true

これでオートロードが可能になり、バッチが利用できます。

まとめ

今回のRails5.0.0の変更では、config.enable_dependency_loading = trueにする必要があるのは本番環境のみです。開発環境では、設定なしで動作します。
この変更は、最低の改悪だと思うのですが、どうしようもありません。
私の環境と同じように、オートロードでバッチを利用している場合は、設定ファイルを変更して対応してください。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2016年7月5日火曜日

【Nginx】Nginxの更新 CentOS6.XでNginxを更新する

  • 公開日:2016年07月05日

記事概要

centOSでNginxを更新する方法を記述した記事です。

環境

  • Nginx 1.0.15 → 1.10.1
  • centos6.5

条件

centos6.5にNginxのインストールがされている前提

更新方法

現在のバージョンを確認します。

terminal

$ nginx -V
nginx version: nginx/1.0.15

centos6.5はデフォルトのレポジトリだと、上記の1.0.15をインストールするので、現在のリポジトリの状態を確認します。

/etc/yum.repos.d/nginx.repo

vi /etc/yum.repos.d/nginx.repo

# nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

baseurlにhttp://nginx.org/packages/centos/6/$basearch/のurlが設定されてれば、updateが可能です。
実際にupdateをしてみましょう。

terminal

sudo yum update -y nginx

updateが終了したら、versionを確認します。

terminal

nginx -V
nginx version: nginx/1.10.1

正常に更新されました。

まとめ

centos6.X系を利用していても、リポジトリさえ有効になっていれば、簡単にnginxを更新できます。
Nginx ver 1.9.5からはHTTP/2もサポートされているので、なるべく最新状態を保つようにしましょう。

以上。

運営サイト(railsで作成しています)

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...