Rails "warning: already initialized constant ActiveRecord::Base::OrmAdapter" エラーの対処
開発環境
OS X 10.9.5 rails 4.1.6 ruby 2.1.0
問題
Railsのバージョンを4.2.0から4.1.6に切り替えたのちに、
$ bundle exec rails c
をしたところ、
"warning: already initialized constant ActiveRecord::Base::OrmAdapter" "warning: previous definition of OrmAdapter was here"
などのエラーが出た。
結論
$ bundle exec rake rails:update
で解決。
経緯
$ rails new をしたときは rails 4.2.0 だったが、その後Gemfileを
gem 'rails', '4.2.0' ↓ gem 'rails', '4.1.6'
と書き換えて bundle install。
この後、rails c をしたところエラーが発生した。
対処
参考サイト
Rails server not running due to ORM Adapter · Issue #36 · ianwhite/orm_adapter · GitHub
どうやら、Gemfileをいじって bundle install するだけではだめで、rakeのほうでも変更を反映させる必要があるらしい。
$ bundle exec rake rails:update
このコマンドを実行すると、以下の様なコンフリクトが発生する。
conflict config/boot.rb conflict config/application.rb conflict config/secrets.yml conflict config/environments/development.rb conflict config/environments/production.rb conflict config/environments/test.rb conflict config/initializers/assets.rb conflict config/initializers/cookies_serializer.rb conflict config/initializers/session_store.rb conflict bin/rails conflict bin/rake
すべてyesでポチポチエンターを押していけば問題ない。 これで解決。
Rails "uninitialized constant ****Controller" の対処法
開発環境 OS X 10.9.5 rails 4.2.0 ruby 2.1.0 devise carrierwave mini_magick
問題
root_url/admin
にアクセスした際に、"Routing Error uninitialized constant AdminController" と出た。
結論
・admin_controller.rb が存在していなかった。
・Controllerの継承を意識していなかった。
データ構造
deviseでサインアップする際に、アイコン画像を設定できるようにするために、Strong Parametersに"icon"パラメータを追加した。また、肥大化を防ぐためにControllerが若干複雑になっている。
なお、rooturl/admin では、ログインしているユーザーの投稿一覧が表示されるようにしたい。
# config/routes.rb ~~中略~~ match 'admin', to: 'admin#show', via: 'get' ~~中略~~
# controllers/application_controller.rb class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protect_from_forgery with: :exception protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:screen_name, :icon, :remote_icon_url, :email, :encrypted_password, :password) } end end
# controllers/authorized_controller.rb class AuthorizedController < ApplicationController before_action :authenticate_user! end
対処
肝心のAdminControllerが存在していなかったため、controllers/admin_controller.rb を作成。
# controllers/admin_controller.rb class AdminController < AuthorizedController def show @articles = current_user.articles end end
その後ページをリフレッシュして解決。
このエラーに遭遇したら、ルーティングだけではなく、Controllerの継承と有無についても検証してみると良いでしょう。
"Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/**.local.pid)." エラーの対処
開発環境 OS X 10.9.5 mysql Ver 14.14 Distrib 5.6.23, for osx10.9 Homebrew 0.9.5
エラー
mysqlのサーバーが立っていなかったので、
$ sudo mysql.server start
をしたところ
Starting MySQL . ERROR! The server quit without updating PID file (/usr/local/var/mysql/**.local.pid).
このエラーが出た。これはPCの再起動後などに出るが、色々な問題・解決方法があり、非常に厄介なエラー。
結論
$ sudo chown -R _mysql:_mysql /usr/local/var/mysql
今回は、これでmysql以下のファイルの所有者をすべて_mysqlにすると解決した。
$ sudo mysql.server start Starting MySQL . SUCCESS!
補足
上記の他にも、状況によって
- /usr/local/var/mysql/ 以下の .err ファイルを消す
- /usr/local/var/mysql/ 以下の .pid ファイルと ps -alx | grep mysql で残ったプロセスをキルする
- /usr/local/var/mysql/ 以下の .err ファイルの所有者を _mysql からホストに変更する
などの方法があるので、その場その場で対応しましょう。
rails "undefined method '**_image will_change!' エラーの対処 【carrierwave】
開発環境 OS X 10.9.5 rails 4.2.0 ruby 2.1.0 carrierwave mini_magick cocoon
問題
ネストしたモデルでcocoonと複数画像アップロードを実装しようとしましたが、createのところで"undefined method 'post_image will_change!'" というエラーが出ました。
結論
原因は、post_detailsテーブルのカラム名の設定ミスでした。
データ構造
# models/post.rb class Post < ActiveRecord::Base has_many :post_details accepts_nested_attributes_for :post_details, reject_if: :all_blank, allow_destroy: true end
# models/post_details.rb class PostDetail < ActiveRecord::Base belongs_to :post mount_uploader :post_image, PostImageUploader end
# controllers/posts_controller.rb class PostsController < ApplicationController def index @posts = Post.all end def new @post = Post.new end def create @post = Post.new(create_params) if @post.save redirect_to post_path(@post) else render :new end end def show @post = Post.find(params[:id]) end private def create_params params.require(:post).permit(:title, post_details_attributes: [:name, :post_image, :remote_post_image_url]) end end
# views/posts/_post_detail_fields.html.erb <div class="nested-fields"> ~~中略~~ <%= f.label :remote_post_image_url, class: 'form-control-label' %> <%= f.text_field :remote_post_image_url, class: 'form-control' %> ~~中略~~ </div>
問題は、post_detailsテーブルのカラム名でした。
# db/migrate/20150324**_create_post_details.rb class CreatePostDetails < ActiveRecord::Migration def change create_table :post_details do |t| t.string :name t.string :image t.references :post, index: true t.timestamps null: false end add_foreign_key :post_details, :posts end end
画像を格納するカラム名をimageにしていたのがミスでした。
対処
post_detailsテーブルにpost_imageカラムを追加して解決!
$ bundle exec rails g migration AddPostImageToPostDetail post_image:string $ bundle exec rake db:migrate
基本的にはこちらのページを見れば実装できます。
git pushで100MBを超えてエラーが出たときの対処法
開発環境 OS X 10.9.5 git version 2.3.2
pushしようとしたら以下のエラーがでた
$ git push origin master Counting objects: 4924, done. Delta compression using up to 4 threads. Compressing objects: 100% (4534/4534), done. Writing objects: 100% (4924/4924), 91.29 MiB | 2.22 MiB/s, done. Total 4924 (delta 547), reused 0 (delta 0) remote: error: GH001: Large files detected. remote: error: Trace: 68fe267b6067c61b005039be456ed1bb remote: error: See http://git.io/iEPt8g for more information. remote: error: File vendor/bundle/ruby/2.1.0/gems/libv8-3.16.14.7-x86_64-darwin-13/vendor/v8/out/x64.release/libv8_base.a is 150.14 MB; this exceeds GitHub's file size limit of 100 MB
問題になっているのは以下のファイルであることがわかる
vendor/bundle/ruby/2.1.0/gems/libv8-3.16.14.7-x86_64-darwin-13/vendor/v8/out/x64.release/libv8_base.a
以下のコマンドを入力
$ git filter-branch --tree-filter 'rm -f vendor/bundle/ruby/2.1.0/gems/libv8-3.16.14.7-x86_64-darwin-13/vendor/v8/out/x64.release/libv8_base.a' HEAD
その後
$ git push -u origin master
これで解決。
Sublime Text 2 をMacのターミナルから開けるようにするコマンド
開発環境 OS X 10.9.5 Mavericks
以下のコマンドを入力すればOK。
$ ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl
$ subl .
これでカレントディレクトリ以下がツリーになって開かれれば成功です。
ちなみに公式ドキュメントでは以下のようになっていてうまくいきませんでした。
ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" ~/bin/subl
ドキュメントどおりにやってうまくいかなかった場合は、どこにパスが通っているのかを確認する必要がありますね。
ちなみに、以下のコマンドでパスを確認できます。
$ echo $PATH
参考にさせていただいたサイト
SublimeText2をMacにインストールしてターミナルから起動できるようにする。 | 心はいつもAirPucci (空元気でもいいから)
Ruby on Rails をバージョン指定してインストールする方法
開発環境 OS X 10.9.5 Mavericks Ruby 2.1.0 rbenv 0.4.0
記法は以下のようになっています
$ gem install rails --version="3.2.17" #指定バージョンをインストール $ gem install rails --version="~>3.2.0" #3.2.X系の最新バージョンをインストール $ gem install rails --version="~>3.0" #3.X系の最新バージョンをインストール
$ gem list local
これでlocalに入っているrailsを確認します。
$ rbenv rehash
これをすることによって、gemの変更が反映されます。
$ rails -v
これで自分の入れたかったバージョンが表示されれば成功です。
以下のサイトを参考にさせていただきました。