Gemに依存Gem情報を書くときはGemfileじゃなくて.gemspecに書くこと!
ちょっとハマったので備忘録です。
タイトルの通り、Gemを作るとき依存関係のGemの情報を書くときはGemfileじゃなくて.gemspecに書くようです。 詳しくは
gemライブラリの依存はGemfileではなくgemspecに記述する理由 - Qiita
こちらに詳しく載っていますが、私の場合、何回か試してもダメでした。 最終的には使えるようになったのですが以下のことを試しました。
- そもそも依存gem云々の前に作成されたgemファイルも一緒にリポジトリにあげていました。
その結果、
bundle install
したら、こんなエラーが出ました。
$ bundle install Ignoring io-console-0.4.6 because its extensions are not built. Try: gem pristine io-console --version 0.4.6 Ignoring json-2.0.2 because its extensions are not built. Try: gem pristine json --version 2.0.2 Ignoring mysql-2.9.1 because its extensions are not built. Try: gem pristine mysql --version 2.9.1 Ignoring psych-2.1.0 because its extensions are not built. Try: gem pristine psych --version 2.1.0 Fetching https://github.com/xiao1203/stock_fundamental_scraper.git You have one or more invalid gemspecs that need to be fixed. The gemspec at /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-a2e8bc06c189/stock_fundamental_scraper.gemspec is not valid. Please fix this gemspec. The validation error was 'stock_fundamental_scraper-1.0.0 contains itself (stock_fundamental_scraper-1.0.0.gem), check your files list'
ここに書いてあるように
gem pristine json --version 2.0.2
を試してstock_fundamental_scraper-1.0.0
をリポジトリから削除しました。
- gem依存で怒られる
本題ですね。
こんなのが出ました。
※野良Gemをrails アプリケーションに組み込むため、
rails側のGemfileにgem 'stock_fundamental_scraper', github: 'xiao1203/stock_fundamental_scraper'
を追加して、
rails s
を実行しました。
$ rails s Ignoring io-console-0.4.6 because its extensions are not built. Try: gem pristine io-console --version 0.4.6 /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)
こんな感じに怒られました。
- Gemfileから依存gem情報を削除し、(コメントアウトしました)
source 'https://rubygems.org' # Specify your gem's dependencies in stock_fundamental_scraper.gemspec gemspec # gem 'mechanize' # gem 'nokogiri' # gem 'pry'
gemspecにはこのように記載
lib = File.expand_path('../lib', __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) require 'stock_fundamental_scraper/version' Gem::Specification.new do |spec| spec.name = "stock_fundamental_scraper" spec.version = StockFundamentalScraper::VERSION 省略 spec.add_development_dependency "bundler", "~> 1.13" spec.add_development_dependency "rake", "~> 10.0" spec.add_development_dependency "rspec", "~> 3.0" spec.add_runtime_dependency 'mechanize' spec.add_runtime_dependency 'nokogiri' end
再度実行。
$ rails s /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)
変わんねーじゃん。。
- bundle installがうまくいってないのかな、と思い、
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/
にいるgemを直接削除して、再度bundle install
、リトライ
$ rails s /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError) from /usr/local/var/rbenv/versio
心折れるわ〜
- gemを物理削除するんじゃなく、uninstallのほうが良いかも
$ gem uninstall stock_fundamental_scraper
でもう一度リトライ
$ rails s /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/bundler/gems/stock_fundamental_scraper-140f22be3000/lib/stock_fundamental_scraper/scraper.rb:1:in `require': cannot load such file -- mechanize (LoadError)
……(怒)
- updateはどうだ?
$ bundle update stock_fundamental_scraper
リトライ
$ rails s => Booting Puma => Rails 5.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.8.2 (ruby 2.3.1-p112), codename: Sassy Salamander * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://localhost:3000 Use Ctrl-C to stop
よしきたーー
と、まあ、Try & Errorの結果をダラダラ書きました。
やっぱ、gemを修正した後に再読み込みするときは削除してbundle install
ではなく、ちゃんとbundle update
しないといけないってことですかね?
macOS Sierraでrails5を使おうとしたらmysqlでエラーになった。
こんな感じ
省略... Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 /usr/local/var/rbenv/versions/2.3.1/bin/ruby -r ./siteconf20170321-38342-1u8g6eb.rb extconf.rb 省略... ----- Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load ----- ----- Setting libpath to /usr/local/Cellar/mysql/5.7.17/lib ----- creating Makefile current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 make "DESTDIR=" clean current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 make "DESTDIR=" compiling client.c compiling infile.c compiling mysql2_ext.c compiling result.c compiling statement.c linking shared-object mysql2/mysql2.bundle ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5 for inspection. Results logged to /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.5/gem_make.out An error occurred while installing mysql2 (0.4.5), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.4.5'` succeeds before bundling. run bundle exec spring binstub --all Could not find gem 'mysql2 (< 0.5, >= 0.3.18)' in any of the gem sources listed in your Gemfile or available on this machine. Run `bundle install` to install missing gems.
なんだかよくわからんがmysql2
のビルドに失敗している、と。
とりあえず、
$ gem install mysql2 -v '0.4.5'
を実行。
Building native extensions. This could take a while... ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 /usr/local/var/rbenv/versions/2.3.1/bin/ruby -r ./siteconf20170321-55696-zu02ml.rb extconf.rb checking for rb_absint_size()... yes checking for rb_absint_singlebit_p()... yes checking for ruby/thread.h... yes checking for rb_thread_call_without_gvl() in ruby/thread.h... yes checking for rb_thread_blocking_region()... no checking for rb_wait_for_single_fd()... yes checking for rb_hash_dup()... yes checking for rb_intern3()... yes checking for rb_big_cmp()... yes ----- Using mysql_config at /usr/local/bin/mysql_config ----- checking for mysql.h... yes checking for SSL_MODE_DISABLED in mysql.h... yes checking for SSL_MODE_PREFERRED in mysql.h... yes checking for SSL_MODE_REQUIRED in mysql.h... yes checking for SSL_MODE_VERIFY_CA in mysql.h... yes checking for SSL_MODE_VERIFY_IDENTITY in mysql.h... yes checking for errmsg.h... yes checking for mysqld_error.h... yes ----- Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load ----- ----- Setting libpath to /usr/local/Cellar/mysql/5.7.17/lib ----- creating Makefile current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 make "DESTDIR=" clean current directory: /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5/ext/mysql2 make "DESTDIR=" compiling client.c compiling infile.c compiling mysql2_ext.c compiling result.c compiling statement.c linking shared-object mysql2/mysql2.bundle ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [mysql2.bundle] Error 1 make failed, exit code 2 Gem files will remain installed in /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.5 for inspection. Results logged to /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.5/gem_make.out
はい。やっぱダメでしたね。
エラーの内容を見たら
checking for rb_thread_blocking_region()... no
とのこと。 色々ググったら
こちらの解決策1と解決策3 を実行したらうまくいきました。
ははぁ、、、
自動売買システムを作ろう!その0
タイトルの通りです。
株、FX(ビットコイン)を自動売買システムを少しずつ作ろうと思います。
実は昔、株ロボやFXの自動売買にチャレンジしたことがあるので、全くの初めてってわけではありません。
※なぜ、自動売買システムを作っていながら、今も馬車馬のように働いているか、、察してください。
ロードマップはこんな感じを想定しています。
※とりあえず、Ruby、Ruby on Railsで作ろうとしています。
ステップ1
各株情報サイトより、データをスクレイピングするgemの作成(Yahooファイナンスは除外。理由)
github.com
2017/3/19 現在では未完成
※多分、rubygemには公開しないと思います。
ステップ2
このgemを使い、RailsでAPI通信を行うサイトを作成。
あまりスクレイピング先に負荷をかけないように、リアルタイムの変動が小さい情報についてはRedis等を使い、スクレイピングしなくて済むような形にしたいです。
※レンタルサーバーなどは使わず、自宅の余っているMac miniでやる予定。。。できるかな?出来なかったらHeroku使います。。
ステップ3
見たいな感じです。
もし応援してくれる人いらっしぃましたら、下のバナーからcoincheckのアカウント作成をしていただくと
励みになります。
『すぐそばにある「貧困」』を読んで
1回目は貧困問題に関連した本にしました。
本書は認定NPO法人 もやいの理事長である大西 連氏によって書かれています。
構成としては著者自身の体験に基づく、いくつかの短編回想録(一部、登場人物名等の変更あり)とコラムとして、現在の日本における「生活保護」の現状が具体的なデータと共に示されています。
文章としては非常に読みやすく、読書経験の浅い人間でも苦もなく読み進めることができます。
回想録にはお決まりの「ホームレス」から「家出少年」「メンヘラ(語弊がありますが、あえて使います)」「元暴力団員」が登場し、彼らの窮状や保護申請、そしてその顛末などが書かれています。
申請が通って生活基盤ができた人もいる一方、申請には成功したものの必ずしも幸せにはなっていない、といったケースもあるようで、生活困窮者支援の難しさを考えさせられます。
また、保護申請の中で行政の福祉課の人たちも登場し、彼らの水際作戦にも考えさせられるものがあります。
生活保護をザルのように通していたら問題あるのかな?でも「お金は天下の回りもの」というし、生活保護費の75%は国が負担、かつ、もし25%の負担で財政に負荷の大きな影響があるようなら翌年の地方交付税で多少の考慮はされるはずだから、そんなにマイナスはないと思うんだけどな。。。
少なくともお金のないホームレスが駅前に溢れている、なんて状態よりははるかにマシなはず。
多分、この問題の一番は感情面なんでしょうね。
この辺は後日、ちゃんと調査したいと思います。
行政のセミナーなどで現状報告会とかやってくれないかな・・
あと、この辺りの話を是非ケースワーカーさんにも聞きたい。。
どうやったらそういう人たちと知り合いになれるんだろうか。。
やっぱ生活保護者になるしかないか??(本末転倒)
みたいな感じで、一発目の書評でした。
- 作者: 大西連
- 出版社/メーカー: ポプラ社
- 発売日: 2015/09/08
- メディア: 単行本
- この商品を含むブログ (1件) を見る
積ん読解消に向けて!
このブログの目的
昔から本を買って、最初のほうのページだけ読んで、放置する、っていうのをよくやってしまっています。
Kindleを使うようになってからその傾向に拍車がかかりました。。。
また最近、年のせいか、読んだ内容がなかなか頭に入らない。。
学習系の本や教育系のブログではよく書いてありますが、ある年齢を超えたら、インプットよりアウトプットが重要とのこと。
本を読んで、その内容をアウトプットする、となると、やっぱ書評かな、と。
別に偉そうなこと書こうとは思っていません。
ぶっちゃけ、自分のためのチラ裏ブログのつもりです。
興味あること
- 会計/経理
- 人口知能
- 投資
- 経営
- 英語
- 貧困問題
- Ruby
- Ruby on Rails
- Elixir
なので、このあたりの本を読んでいこうと思います。
特に当方、サーバーサイドのRailsエンジニアでスマホアプリも多少はいけます。
webサービスを使って貧困問題を解決したい!!