はじめに
1からMacにRails環境を構築する方法と概要についてメモします。
パッケージ管理ソフトはhomebrewを使用します。
Command Line Toolsインストール
Macで開発を行うためのコマンドラインツールをインストールします。
参考抜粋
——————————————————————————————————-
デベロッパ ポータルから直接、Xcode コマンド ライン ツールを .dmg ファイルとしてダウンロードすることができます。
Mac で https://developer.apple.com/downloads/index.action にアクセスします。
インストールの途中で Apple Developer としてログインするよう求められます。
[Downloads for Apple Developers]リストで、必要な[Command Line Tools]の項目を選択します。
——————————————————————————————————-
参考:
http://www.hulinks.co.jp/support/fortran/f_macosx018.html
Homebrewインストール
パッケージ管理ソフトのHomebrewをインストールします。Macにパッケージ類をインストールするためのソフトです。
インストール
$ ruby -e “$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)”
インストール確認(バージョンチェック)
$ brew -v
homebrewのバージョンが表示されれば成功です
rbendインストール
Rubyのバージョン管理に使用するrbenvをインストールします。
rubyのバージョンアップの切り替えをサポートするツールです。
rbend,ruby-buildインストール
$ brew install rbenv ruby-build
rbendのパスを設定します
echo ‘eval “$(rbenv init -)”‘ >> ~/.bash_profile
echo ‘export PATH=”$HOME/.rbenv/shims:$PATH”‘ >> ~/.bash_profile
source ~/.bash_profile
Rubyインストール
rbenvを使いrubyのインストール可能バージョンを確認します
$ rbenv install -l
上記よりインストールしたいrubyを選びインストールします
$ rbenv install (バージョン名)
例) 2.3.0のrubyをインストールする場合
$ rbenv install 2.3.0
※The Ruby openssl extension was not compiled. Missing the OpenSSL lib?エラーとなる場合
参考http://to-developer.com/blog/?p=1197
インストール確認をします
$ rbenv versions
関連ディレクトリの更新 ※しないといけない
$ rbenv rehash
参考
http://dqn.sakusakutto.jp/2014/02/rbenv_rehash_what_it_does.html
使用するrubyのバージョンを設定します
$ rbenv global 2.3.0
rubyのバージョンを確認します
$ ruby -v
ここでバージョンが2.3.0になっていれば成功です。
失敗した場合、PATHを確認します
$ which ruby
/usr/bin/rubyなどの場合はPATHが正しくありません
PATHの設定を行います
下記はbashの場合の.bash_profileにパス設定を行いますが、zshなどの場合はファイルを変更してください。
echo ‘export PATH=”$HOME/.rbenv/bin:$PATH”‘ >> ~/.bash_profile
echo ‘if which rbenv > /dev/null; then eval “$(rbenv init -)”; fi’ >> ~/.bash_profile
再度PATHを確認します
$ which ruby
/Users/*******/.rbenv/shims/rubyのようになっていれば成功です。
再度rubyのバージョンを確認します
$ ruby -v
ここでバージョンが2.3.0になっていれば成功です
Railsインストール
ruby標準のダウンロードツール(コマンド)gemを使いインストールします。
RDoc(Documentation from Ruby Source Files)をインストールします
$ gem install rdoc
※これをいれずにRailsをインストールすると「file ‘lib’ not found」がでます。
bundleライブラリを使ってrailsとその他gemをインストールする
Rails開発で使いそうなライブラリもgemでインストールしておきます。
gemをまとめて管理するためにbundleライブラリが用意されています。
gemfileにインストールするgemのリストを作るとインストールできます。
bundlerをインストールします
$ gem install bundler
gemfileの初期設定を行います。
bundle init
※カレントディレクトリにGemfileが作成されます。
Gemfileを次のように追加します。(よく利用するgemを仮にインストール設定します)
source “https://rubygems.org”
gem “rails”
gem “mysql”
gem “sqlite3″
gem “rake”
gem “uglifier”
gem “json”
gemのインストールを行います
$ bundle install –path vendor/bundle
Railsのバージョンを確認します
$ sudo rails -v
2016/12現在5.0.0.1が最新です
Railsプロジェクト作成
新規Railsプロジェクトの構成を作成します
$ sudo bundler exec rails new .
Gemfileを上書きするか聞かれますが、Yで上書きしてください。
Railsプロジェクト実行
Railsプロジェクトの直下でサーバを起動します
$ sudo bundler exec rails s
=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode…
* Version 3.6.2 (ruby 2.3.0-p0), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
ブラウザでアクセスすることでRailsの初期画面が表示します。(起動を中止する場合はCtrl+Cです)
http://localhost:3000
はじめに
Unicorn + Nginxで、Railsアプリの公開までに必要な設定を行います。
最近のRailsアプリではApache + Passengerの組み合わせよりもパフォーマンス面に強いということでNginx + Unicornが使われることが多くなっています。
Unicorn導入
UnicornはRuby用アプリケーションサーバのことです。
Unix系OS上で動作するRack規格Rubyアプリケーションを動かすためのアプリケーションサーバです。
Unicornの設定はいろいろあるので今回は簡易設定のみにします。
公式ページ:
http://unicorn.bogomips.org/
Unicornの詳細で参考にしたページです
http://www.engineyard.co.jp/blog/2013/everything-you-need-to-know-about-unicorn/
デプロイ対象のRailsプロジェクトを設置
今回は/home/直下に設置します
Unicornインストール
デプロイ対象のアプリディレクトリ直下のGemfileに以下を追加します
gem install unicorn
インストールします
$ bundle install
Unicorn設定
sock,pidファイルのディレクトリを作成します
$ mkdir /var/run/unicorn $ chmod 777 /var/run/unicorn
デプロイ対象のアプリディレクトリ直下のconfigディレクトリへunicorn.rbファイルを作成し以下コードで保存します
application = "<Railsアプリケーションディレクトリ名>" worker_processes = 2 working_directory "/home/#{application}" listen "/var/run/unicorn/unicorn_#{application}.sock" pid "/var/run/unicorn/unicorn_#{application}.pid" stderr_path "/home/#{application}/log/unicorn.stderr.log" stdout_path "/home/#{application}/log/unicorn.stdout.log" preload_app true
※worker_processesは適時変えてください
Unicorn起動時などにエラーなど出る場合は上記指定しているパスの「unicorn.stderr.log」ファイルで確認ができます
Unicorn起動
デプロイ対象のアプリディレクトリ直下で以下コマンドを実行します
$ unicorn_rails -c config/unicorn.rb -E development -D
※ここでエラーが出なければプロセスが実行されています
unicorn_railsのオプションについては以下になります
-c : 設定ファイル
-E : RAILS_ENV(デフォルトはdevelopment)
-D : デーモンで実行(バックグラウンド)
-p : ポート指定
–path : ディレクトリ指定
unicornのプロセスを確認してみます
ps aux | grep unicorn
ここで正しくでていればOKです
Nginx導入
軽量・高速のwebサーバーでRailsの開発ではApacheよりシェア高く、速度も高速とのことのようです。
こちらもいろいろしようとすると設定がいろいろあるので、プロジェクトにあった設定にするとパフォーマンスがあがる?と思います。
Nginxインストール
Nginxをインストールします
$ yum install nginx
Nginx設定
デフォルト設定ファイルを無効にし、設定ファイルsample.confを作成します
$ cd /etc/nginx/conf.d $ mv default.conf _default.conf.bak $ vim sample.conf
sample.confは以下の設定にします
upstream unicorn-unix-domain-socket { server unix:/var/run/unicorn/unicorn_hoge.sock fail_timeout=0; } upstream unicorn-tcp { server 127.0.0.1:3000; } server { listen 80; server_name localhost; root /home/[railsapp]/public; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { proxy_pass http://unicorn-unix-domain-socket; } }
※「unicorn_hoge.sock」部分はunicorn.rbの「listen “/var/run/unicorn/unicorn_#{application}.sock”」で設定した値に置き換えて設定してください
Nginx起動
Nginxを起動します
$ service nginx start
既に起動している場合に設定情報を反映される場合は再起動をします
$ service nginx restart
ブラウザ動作チェック
http://[ipアドレス]
はじめに
gemを実装しなくとも論理削除は実装可能ですが、railsライクで論理削除gemのparanoiaを導入して、レコードの論理削除を実装します。
動作としては削除日時(deleted_at)カラムを用意して削除するときに、deleted_atに日時を入れてくれるというものです。この状態でレコードを表示すると、削除されたレコードは抽出対象にならずに表示してくれます。
paranoiaの導入
詳細については以下のリポジトリreadmeを参照ください
gemリポジトリ:
https://github.com/radar/paranoia
paranoiaインストール
Gemfileにparanoiaの定義を記述
gem "paranoia"
反映
bundle install
論理削除用のカラムをテーブルへ追加
論理削除にparanoiaが使用するカラムを用意します。paranoiaではこのカラムを使用してSQLを発行するのでindexを一緒に速度を考慮してつけておきます。
例)Usersテーブルへ論理削除用のdeleted_atカラムを追加します※index込み
rails generate migration AddDeletedAtToUsers deleted_at:datetime:index
マイグレーションファイルの中身は以下のとおりです
class AddDeletedAtToUsers < ActiveRecord::Migration
def change
add_column :users, :deleted_at, :datetime
add_index :users, :deleted_at
end
end
テーブルへ反映します
rake db:migrate
対象テーブルのModelへparanoia機構を反映
対象のテーブルのModelへparanoia設定をします
例)UsersテーブルのModelへ設定します
class Users < ActiveRecord::Base
acts_as_paranoid
end
このときもしもparanoiaのデフォルトのdeleted_atでなく、別の名前のカラム名にした場合は以下のようになります
class Users < ActiveRecord::Base
acts_as_paranoid column: :任意のカラム名
end
paranoiaの使い方
paranoiaを導入したところで、実際にデータを論理削除を行い、テーブルの参照を行って表示されないことを確認してみます。
メソッドの詳細系はreadmeを参照ください
gemリポジトリ:
https://github.com/radar/paranoia
テーブルからレコードの論理削除
テーブルのレコードを削除します
例)UsersテーブルのID「1」のレコードを削除します
user = Users.find(1) user.destroy
ここで発行されているSQLは以下の通りです
update users set updated_at = ’2015-07-23 00:00:00′, deleted_at = ’2015-07-23 00:00:00′ where id = 1
テーブルのレコード一覧を確認
正しく削除されているか確認します
Users.all
※ID「1」が表示されていなければOKです
ここで発行されているSQLは以下の通りです
select * from users where deleted_at is null
テーブルから削除したレコードインスタンスの確認
削除したインスタンスの状態を確認します
user.deleted_at
※削除した日時が表示されていればOKです
テーブルの削除レコードを含むレコードの一覧を確認
削除したレコードも含み全体を確認します
Users.with_deleted
※ID「1」とその他レコードが表示されていればOKです
ここで発行されているSQLは以下の通りです
select * from users
テーブルの削除したレコードの一覧を確認
削除したレコードを確認します
Users.only_deleted
※ID「1」が表示されていればOKです
ここで発行されているSQLは以下の通りです
select * from users where deleted_at is not null
テーブルからレコードの物理削除
paranoiaを導入したことにより、論理削除を強制としますが、それでも物理削除をしたい場合もあります。
その場合はdestoyメソッドに!をつけてdestory!を実行すると物理削除になります。
はじめに
railsでは標準のirbよりも高度なpryがコンソールツールとしてよく使われています。
そしてデバッグ時にpryまたはirbでモデル表示「[モデル名].allなど」をおこなうと表示があまり見やすくありません。
もう少し見やすくということでHirbでは表形式で表示してくれます。
pry + Hirb の導入
Gemfileの追記
プロジェクト直下にあるGemfileへpryとHirbのgemを記述します
pryはpry-railsのみで良いのですが、よく使われるその他pry関連gemも入れておきます。詳細はドキュメントを参照ください。
group :development, :test do gem 'hirb' # hirb gem 'hirb-unicode' # hirbの日本語対応用 gem 'pry-rails' # pryコンソール gem 'pry-doc' # メソッドを表示 gem 'pry-byebug' # デバッグを実施(Ruby 2.0以降で動作) gem 'pry-stack_explorer' # スタックをたどる end
※どちらもデバッグツールのためdevelopment,testとしておきます
インストール実行
$ bundle install
.pryrcファイルの追加
.pryrcファイルをプロジェクト直下に以下の内容で作成してください。
begin require 'hirb' rescue LoadError # Missing goodies, bummer end if defined? Hirb # Slightly dirty hack to fully support in-session Hirb.disable/enable toggling Hirb::View.instance_eval do def enable_output_method @output_method = true @old_print = Pry.config.print Pry.config.print = proc do |*args| Hirb::View.view_or_page_output(args[1]) || @old_print.call(*args) end end def disable_output_method Pry.config.print = @old_print @output_method = nil end end Hirb.enable end
内容はバージョンにより更新される場合があるので最新版は以下のサイトより確認ください。
https://github.com/pry/pry/wiki/FAQ#hirb
動作チェック
pryコンソールモードに入ります
$ rails c
pryコンソールモードでモデルの情報を表示します
pry(main)> User.all
※Userモデルの値を表示
実行結果として表形式で表示されるようになっていればOKです。
はじめに
Rails開発で「不要なDBのクエリー処理」があります。それらを改善するためのEagerLoadingについて対応策についてメモしておきます。
N+1問題について
「N+1」問題は2つのテーブルで関連(association)している場合にありえます。
SQL文が「N+1」回分実行されてしまいパフォーマンスを低下させてしまいます。データ件数が増えれば増えるほど、この問題でパフォーマンスが落ちます。そのためこの問題が起きないように対応する必要があります。
N+1問題の実例
ユーザ情報を保持するusersテーブルと、掲示板投稿データを保持するpostsテーブルで1対Nの関係を持っている場合の例を出します。
usersモデル:
class User < ActiveRecord::Base
has_many :posts
end
postsモデル:
class Post < ActiveRecord::Base
belongs_to :user
end
postsコントローラ:
def index
@posts = Post.all
end
postsビュー(postsの全データを表示):
<% @posts.each do |post| %>
〜 なんらかの処理 〜
<% end %>
※posts.eachでSQL文「select * from posts」が実行されます
postsビュー(postsからusersのデータを取得):
<% @posts.each do |post| %>
<%= post.user.name %>
<% end %>
※post.user.name(nameはDBカラム)でSQL文「select users.* from users where users.id = ? limit 1 ["id", 1]」がpostsの件数分実行されます
件数分実行することがN+1問題となりパフォーマンスに影響を与えてしまっています。
N+1問題をEager Loadingで改善
Eager Loadingとはあらかじめ読み込むデータを取得(1件毎ではなく)しておくことです。
postsコントローラ:
def index
@posts = Post.all.includs(:user)
end
includsメソッドを使い、事前にusersのデータを全て取得しておきます。これによりビューで読み込む時に1件毎に読み込まなくなります。
実際は「SELECT users.* FROM users WHERE users.”id” IN (1, 2, 3, 4, 5)」のように1つのSQLが発行されるのみになります。
includesメソッドやその他EagerLoadingメソッドの参考:
http://qiita.com/k0kubun/items/80c5a5494f53bb88dc58
はじめに
modelのnewとbuildをネットで見ると濫用していて使い道がわからなかったので調べてみました。
new/buildについて
以下、ドキュメントよりbuildはnewのエイリアスと記載されていました。そのため機能的には全く同じようです。
参考:
newについて
http://railsdoc.com/references/new
buildについて
http://railsdoc.com/references/build
暗黙的な使い方の違いについて
どちらも同じということですが、やはり使い分けには暗黙のルール(コーディングルール)があるようです。
例えば、Postsテーブル(投稿用)とComments(投稿に対するコメント)の場合、カーディナリティは1:Nになります。
その場合にPostsにはnew、その子に当たるCommentsにはbuildという具合に関係性を表す場合に使い分けているようです。
modelクラスではPostsはhas_manyで:comments、Commentsはbelong_toで:postsという関係性です。
Posts[1]
Posts.new
Comments[N]
Comments.posts.build
はじめに
railsはデフォルトでエラーメッセージなどの表示文字列は英語になっています。そこでローカライズ対応として日本語化する方法になります。
ローカライズ概要
railsではローカライズするために、config/localesディレクトリの中にyaml言語ファイルを作成(日本語の場合:ja.yml)し、yaml形式(シーケンスとマッピング)で対応する日本語を記述すると自動変換してくれるようになります。
日本語化対応
1.config/applicationファイルの編集
以下のコメントアウトを外し対応言語をjaとします
config.i18n.default_locale = :ja
2.config/locales/ja.ymlファイルを作成する
新規で作成し、手動で設定しても可能ですが、既にrailsのローカライズ対応済みのファイルがgithubで公開されているため、こちらを使用します。
https://github.com/svenfuchs/rails-i18n
日本語化ファイルはjaファイルになります
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
ja.ymlファイルを取得
$ curl -o config/locales/ja.yml -L https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
これで日本語化完了です。ja.ymlの中身をみて、日本語文字列を別途変更したい場合は手動で変更してください。
エラーメッセージのja.ymlは以下のようになっています
errors: format: "%{attribute}%{message}" messages: accepted: を受諾してください。 blank: を入力してください。 present: は入力しないでください。 confirmation: と%{attribute}の入力が一致しません。 empty: を入力してください。 equal_to: は%{count}にしてください。 even: は偶数にしてください。 exclusion: は予約されています。 greater_than: は%{count}より大きい値にしてください。 greater_than_or_equal_to: は%{count}以上の値にしてください。 inclusion: は一覧にありません。 invalid: は不正な値です。 less_than: は%{count}より小さい値にしてください。 less_than_or_equal_to: は%{count}以下の値にしてください。 not_a_number: は数値で入力してください。 not_an_integer: は整数で入力してください。 odd: は奇数にしてください。 record_invalid: バリデーションに失敗しました。 %{errors} restrict_dependent_destroy: "%{record}が存在しているので削除できません。" taken: はすでに存在します。 too_long: は%{count}文字以内で入力してください。 too_short: は%{count}文字以上で入力してください。 wrong_length: は%{count}文字で入力してください。 other_than: は%{count}以外の値にしてください。 template: body: 次の項目を確認してください。 header: one: "%{model}にエラーが発生しました。" other: "%{model}に%{count}個のエラーが発生しました。"
はじめに
Railsで簡易メッセージをViewで表示するために用意されているflashオブジェクトについてメモしておきます。
Controllerからredirect_toメソッドでViewに渡すことが一般的です。
flashオブジェクトとは
ControllerからViewに簡易メッセージ(ログインメッセージ、エラーメッセージ)を送信し表示する場合に使います。
http://railsdoc.com/references/flash
使い方
Controller側(redirect_toメソッド)
redirect_toメソッドはオプションにnotice,alert,flashを用意しています。
notice例:
redirect_to action: 'index', notice: 'ログインに成功しました'
alert例:
redirect_to action: 'index', alert: 'ログインできません'
flash例:
redirect_to action: 'index', flash: {notice: 'ログインに成功しました'}
※flashでキーはオプションのnotice,alertのほか任意の名前でも可能です
http://railsdoc.com/references/redirect_to
View側
notice,alertを表示する例:※bootstrapでメッセージ枠を表示
<% if flash[:notice] %> <div class="alert alert-success"> <%= flash[:notice] %> </div> <% end %> <% if flash[:alert] %> <div class="alert alert-danger"> <%= flash[:alert] %> </div> <% end %>
ifでnotice,alertの中身がある場合に表示とするのがよく使われる
はじめに
bundle installでgemのnokogiriがinstallできていませんとエラーがでました。
直接nokogiriをinstall指定していませんでした。※これはインストールするgem内でnokogiriを使っているgemがあったのかと思います。
その後、nokogiriをyumでインストールしましたがエラーが出たため、対応策をメモしておきます。
エラーの改善について
詳細エラー内容
インストール実行
$ sudo yum install nokogiri
エラー内容
Building native extensions. This could take a while…
ERROR: Error installing nokogiri:
ERROR: Failed to build gem native extension./home/vagrant/.rbenv/versions/2.2.1/bin/ruby -r ./siteconf20150506-10401-826g5c.rb extconf.rb
checking if the C compiler accepts … yes
Building nokogiri using packaged libraries.
checking for gzdopen() in -lz… yes
checking for iconv… yes
************************************************************************
IMPORTANT NOTICE:Building Nokogiri with a packaged version of libxml2-2.9.2
with the following patches applied:
– 0001-Revert-Missing-initialization-for-the-catalog-module.patch
– 0002-Fix-missing-entities-after-CVE-2014-3660-fix.patchTeam Nokogiri will keep on doing their best to provide security
updates in a timely manner, but if this is a concern for you and want
to use the system library instead; abort this installation process and
reinstall nokogiri as follows:gem install nokogiri — –use-system-libraries
[--with-xml2-config=/path/to/xml2-config]
[--with-xslt-config=/path/to/xslt-config]If you are using Bundler, tell it to use the option:
bundle config build.nokogiri –use-system-libraries
bundle installNote, however, that nokogiri is not fully compatible with arbitrary
versions of libxml2 provided by OS/package vendors.
************************************************************************
Extracting libxml2-2.9.2.tar.gz into tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.9.2… OK
Running patch with /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2/ports/patches/libxml2/0001-Revert-Missing-initialization-for-the-catalog-module.patch…
Running ‘patch’ for libxml2 2.9.2… ERROR, review ‘/home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2/ext/nokogiri/tmp/x86_64-unknown-linux-gnu/ports/libxml2/2.9.2/patch.log’ to see what happened.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.Provided configuration options:
–with-opt-dir
–without-opt-dir
–with-opt-include
–without-opt-include=${opt-dir}/include
–with-opt-lib
–without-opt-lib=${opt-dir}/lib
–with-make-prog
–without-make-prog
–srcdir=.
–curdir
–ruby=/home/vagrant/.rbenv/versions/2.2.1/bin/$(RUBY_BASE_NAME)
–help
–clean
–use-system-libraries
–enable-static
–disable-static
–with-zlib-dir
–without-zlib-dir
–with-zlib-include
–without-zlib-include=${zlib-dir}/include
–with-zlib-lib
–without-zlib-lib=${zlib-dir}/lib
–enable-cross-build
–disable-cross-build
/home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:279:in `block in execute’: Failed to complete patch task (RuntimeError)
from /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:271:in `chdir’
from /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:271:in `execute’
from extconf.rb:311:in `block in patch’
from extconf.rb:308:in `each’
from extconf.rb:308:in `patch’
from /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/mini_portile-0.6.2/lib/mini_portile.rb:108:in `cook’
from extconf.rb:278:in `block in process_recipe’
from extconf.rb:177:in `tap’
from extconf.rb:177:in `process_recipe’
from extconf.rb:475:in `‘ extconf failed, exit code 1
Gem files will remain installed in /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/nokogiri-1.6.6.2 for inspection.
Results logged to /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/extensions/x86_64-linux/2.2.0-static/nokogiri-1.6.6.2/gem_make.out
対応策
エラー内に改善案が書いてありました。
必要なライブラリをインストールし再度nokogiriを指定方法によりインストールします。これで手元環境ではエラーなく成功しました。
$ sudo yum -y install libxml2 libxslt libxml2-devel libxslt-devel $ gem install nokogiri -- --use-system-libraries
はじめに
rails serverコマンドで起動し、http://localhost:3000/tasksと実行でエラーになりました。今回のエラーの改善をメモしておきます。
※rails generate scaffold taskを実行しマイグレーション実行後
エラーの改善について
詳細エラー内容
エラー時に下記のエラーが表示されました
ExecJS::RuntimeUnavailable in Tasks#index ActionView::Template::Error (Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes. (in /home/vagrant/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/turbolinks-2.5.3/lib/assets/javascripts/turbolinks.js.coffee)): 3: <head> 4: <title>Todo</title> 5: <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 6: <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 7: <%= csrf_meta_tags %> 8: </head> 9: <body> app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___192686316235003344_70012938766400'
原因
どうやらnodejsがインストールされていないことが原因のようです。
改善
nodejsをepelリポジトリを入れてインストールします
$ rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm $ sudo yum install nodejs npm --enablerepo=epel
ここまで実行し、再度 rails serverで起動してブラウザで確認すると正常に表示されるようになりました。
nodejsインストールで『Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again』になる場合
yumでnodejsインストール時に手持ち環境でエラーが発生しました。
この場合は下記サイトを参考に修正することができました。
$ vi /etc/yum.repos.d/epel.repo #baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch ↓ baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
はじめに
Vagrantの仮想マシン上でrails serverで実行した場合のローカルPCからアクセスする方法をメモしておきます。
Vagrantの仮想マシンにローカルPCよりブラウザアクセスする方法
vagrantの設定ファイルVagrantfileを修正し、ipアドレスの設定、ポートの設定を行います。
ポートはrails仕様で3000番ポートが使用されるため、仮想環境の3000番ポートをローカルPCの3000番ポートに転送(ポートフォワード)を行います。
手順1「IPアドレスの設定」
Vagrantfileの下記行のコメントアウトを外します。
ここで指定するipアドレスがローカルPCからアクセスするIPアドレスになります。
# config.vm.network :private_network, ip: "192.168.33.10" config.vm.network :private_network, ip: "192.168.33.10"
手順2「ポートフォワードの設定」
Vagrantfileの下記行のコメントアウトを外し、ポート設定を行います。
vagarant仮想環境のポート3000番をローカルPCのポート3000番にポートフォワードします
# config.vm.network "forwarded_port", guest: 80, host: 8080 config.vm.network :"forwarded_port", guest: 3000, host: 3000
手順3「3000番ポートをファイアウォールより開放」
iptablesを無効にしている場合は全ポート開放されているため個別の開放は不要です。
下記よりファイアウォールを切る事ができます
$ sudo service iptables stop $ sudo chkconfig iptables off
個別に3000番ポートのみ開放する場合はiptablesファイルを編集します。
$ sudo vi /etc/sysconfig/iptables
追加記載:
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
手順4「Vagrantfileの設定反映」
Vagrant up していない場合:
$ vagrant up
既にVagrant up している場合:
$ vagrant reload
手順5「rails serverでプロジェクトの起動」
vagrant仮想マシンへssh接続
$ vagrant ssh
Railsプロジェクトのディレクトリ直下でrails server コマンド実行
$ rails server
※ rails s と省略してよし
ローカルPCよりアクセスの確認
ブラウザURI指定
http://192.168.33.10:3000/ または http://localhost:3000/
「Welcome aboard」が表示されればOKです
はじめに
scaffoldコマンドを実行したあとに元に戻す方法として、作成したファイルを手動削除するか、gitなどのバージョン管理で元に戻すことができますが、destroyコマンドで戻せることを知ったのでメモしておきます。
generateコマンドの戻し方
rails generate controllerコマンドを元に戻す
controller自動作成の実行
$ rails generate controller [コントローラ名] [アクション名] ...
controller自動作成のキャンセル
$ rails destory controller [コントローラ名] [アクション名] ...
rails generate modelコマンドを元に戻す
model自動作成の実行
$ rails generate model [モデル名] [フィールド名:データ型] ...
model自動作成のキャンセル
$ rails destoroy model [モデル名]
rails generate scaffoldコマンドを元に戻す
scaffoldの実行
$ rails generate scaffold [モデル名] [フィールド名:データ型] ...
scaffoldのキャンセル
$ rails destoroy scaffold [モデル名]
CentOSへ最新・安定版のRuby2.2.1(rbenv) / Rails4.1.1環境を構築するときのメモ
Rubyのインストールはrbenvを使用する。
rbenvはrubyのバージョン間の切り替えが行えるツール。
現時点でRubyの2.2.1が一番最新で安定版となっている。
※似たものでrvmがあるがrbenvのほうが簡単
参考:http://passingloop.tumblr.com/post/10512902196/difference-between-rbenv-and-rvm
Ruby環境(rbenv)を構築
Gitのインストール
$ sudo yum -y install git
rbenvインストール
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
ruby-buildのインストール ※Rubyをインストールするためのrbenvのプラグイン
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenvを使用できるようにするためのPATH設定
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
設定の反映
$ source ~/.bashrc
設定の確認
$ type -t rbenv function
※functionと表示されればOK
Rubyインストール ※rbenvを使用
$ rbenv install 2.2.1
※rbenvでインストールできるlistは[rbenv install -l]コマンドで確認できる
Rubyインストールでエラー
BUILD FAILED (CentOS release 6.4 (Final) using ruby-build 20150303)
2.2.1のインストールでエラーとなったので改善
$ sudo yum -y install libffi-devel
参考:http://shiro-16.hatenablog.com/entry/2014/12/26/003810
再度Rubyインストール
$ rbenv install 2.2.1 Downloading ruby-2.2.1.tar.gz... -> http://dqw8nmjcqpjn7.cloudfront.net/5a4de38068eca8919cb087d338c0c2e3d72c9382c804fb27ab746e6c7819ab28 Installing ruby-2.2.1... Installed ruby-2.2.1 to /home/vagrant/.rbenv/versions/2.2.1
※これでOK
インストールバージョンをデフォルトで使用するように設定
$ rbenv global 2.2.1
バージョン確認
$ ruby -v ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
※これでOK
Rails環境を構築
Railsインストール
$ gem install rails -v 4.1.1
バージョン確認
$ rails -v Rails 4.1.1
※これでOK
Vagrant(CentOS) + VirtualBoxでRailsの開発環境を構築するときのメモ
Vagrantは、仮想化マシン(VirtualBox,VM etc)の自動作成・管理ツール。
今回はVirtualBoxでCentOSを使用し、Railsの環境を構築しておく。
一度テンプレート化しておくと、次回以降に同様の環境を作成するのが楽になる。
公式サイト:
Vagrant
https://www.vagrantup.com/
VirtualBox
https://www.virtualbox.org/
Vagrant + VirtualBoxダウンロード・インストール
OSにあわせて公式サイトよりダウンロードを行う
現在2015/3/2時点でCentOS[7.0],Vagrant[1.7.3],VirtualBox[4.4.2]のバージョンが最新となっている
Vagrant:
https://www.vagrantup.com/downloads.html
VirtualBox:
https://www.virtualbox.org/wiki/Downloads
ダウンロードしたdmgやmsiファイルからインストール作業を行う
※ウィザードに従いそのままインストールで良い
Vagrantのバージョン確認
バージョン確認:
$ vagrant -v Vagrant version 1.7.3
※インストールバージョンが表示されればインストールOK
Box(CentOS)のテンプレートを取得
Boxリンクが集まっている有名サイト:
http://www.vagrantbox.es/
https://vagrantcloud.com/boxes/search
※今回はCentOS7の最新で仮想ソフトにVirtualBoxを使用しているBoxを選択する:
https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box
Boxの追加コマンド:
$ vagrant box add centos https://f0fff3908f081cb6461b407be80daf97f07ac418.googledrive.com/host/0BwtuV7VyVTSkUG1PM3pCeDJ4dVE/centos7.box Downloading or copying the box... Extracting box... Successfully added box 'centos' with provider 'virtualbox'!
※centos部は任意のboxの名前
「Successfully added box ‘centos’ with provider ‘virtualbox’!」のメッセージが表示されればOK
Boxの確認:
$ vagrant box list centos (virtualbox)
Box(CentOS)のテンプレートから仮想マシンを作成
仮想マシン作成のディレクトリを作成し移動
$ mkdir RailsEnv $ cd RailsEnv
仮想マシンを作成
$ vagrant init centos
※centosはboxに任意につけておいた名前を指定
仮想マシンの起動
仮想マシンの起動
$ vagrant vp
※Vagrantfileの設定情報を読み込み起動する
仮想環境のアクセス(設定)
仮想環境にssh接続を行う
$ vagrant ssh
仮想環境の設定・ツールインストールなど
ファイアーウォールを切っておく ※ローカル環境のためセキュリティは無視
$ sudo service iptables stop $ sudo chkconfig iptables off
vimをインストール
$ sudo yum -y install vim
仮想マシンへブラウザからアクセスするための接続設定 ※Vagrantfileの編集
仮想マシンを抜ける
$ exit
Vagrantfileの編集
$ vim Vagrantfile
ネットワークアクセスのconfigのコメントアウトを解除する(#を消す)
デフォルト設定されている「192.168.33.10」でアクセスができるようになる
# Create a private network, which allows host-only access to the machine # using a specific IP. config.vm.network :private_network, ip: "192.168.33.10"
※ 仮想マシンの/var/www/htmlディレクトリへアクセスされる
Vagrantfileの設定反映
$ vagrant reload
仮想マシンの「/var/www/htmlディレクトリ」とローカルの「仮想マシンディレクトリ」のリンク設定
シンボリックリンクを設置
$ vagrant ssh $ ln -s /vagrant /var/www/html/
※ Vagrantでは仮想マシンの「/vagrantディレクトリ」はローカルの「仮想マシンディレクトリ」とリンクしている
Ruby/Rails環境を構築
以前の記事「最新・安定版のRuby2.2.1(rbenv) / Rails4.1.1環境を構築する」の通り環境を構築する
ここまでで構築完了!
rbenvで2.0.0系のrubyインストール時のエラーの改善方法メモ
rubyのバージョンを2系にしないとrails 4系は動作しないらしい。
改善としてはrubyのバージョンを2系にするかrailsをダウングレードするかのみ。
今回はxcodeのバージョンをアップしていない(OSアップデートしていない)ため
railsのダウングレードをする
Warning: You're using Rubygems 1.8.23 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine --all` for better startup performance. * bin/rake: spring inserted * bin/rails: spring inserted
Railsダウングレード
一度対象のRailsをアンインストールし再度バージョンを指定してRailsのインストールで完了
Railsアンインストール
gem uninstall railties -v '4.1.1'
※アンインストールバージョンが4.1.1の場合
Railsバージョン指定インストール
sudo gem install rails -v '3.2.10'
※インストールバージョンが3.2.10の場合
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
2023年6月 月 火 水 木 金 土 日 « 5月 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
おすすめ備忘録
- [CentOS][Ruby][Rails]最新・安定版のRuby2.2.1(rbenv) / Rails4.1.1環境を構築する
- [Rails]MacにRails開発環境を構築(インストール)する
- [Rails][Ruby]エラー:Warning: You’re using Rubygems 1.8.23 with Spring. Upgrade to at least Rubygems 2.1.0 and run `gem pristine –all` for better startup performance.
- [Ruby][Mac]The Ruby openssl extension was not compiled. Missing the OpenSSL lib?エラー
- [Mac][python]macにpython3をインストール
エントリ