Ruby脚本无法加载通过bundler

时间:2016-01-15 00:59:52

标签: ruby bundler

我试图在我的ruby脚本中包含ruby-mysql gem。我使用bundler安装了gem,但是当我运行bundle exec ./mysql_connector时,收到错误./mysql_connector:4:in ``require': cannot load such file -- ruby-mysql (LoadError)。你能帮我解决一下问题所在吗?

我做了什么

在我的主目录中安装了rails。 我没有对服务器的root访问权限,所以我按照这里的说明在我的本地目录中安装了rails: http://www.r-bloggers.com/installing-ruby-on-linux-as-a-user-other-than-root/

为我的应用程序创建了一个目录。 我的应用程序位于我的主目录中名为connector的文件夹中。它有一个Gemfile,如下所示:

source 'https://rubygems.org'
gem 'ruby-mysql'

致电bundle install

Using ruby-mysql 2.9.14
Using bundler 1.11.2
Bundle complete! 1 Gemfile dependency, 2 gems now installed.
Bundled gems are installed into ./vendor/bundle.

为我的脚本添加依赖项。我的脚本位于connector / mysql_connector中,它显示为:

#!/home/dcox/bin/ruby
require 'rubygems'
require 'bundler/setup'
require 'ruby-mysql'

让脚本可执行。我看到你需要使用可执行文件运行bundle exec,所以我按照这里的说明使我的脚本可执行:http://commandercoriander.net/blog/2013/02/16/making-a-ruby-script-executable/

运行脚本。我使用bundle exec mysql_connector执行并查看:

/home/dcox/bin/mysql_connector:4:in `require': cannot load such file -- ruby-mysql (LoadError)
    from /home/dcox/bin/mysql_connector:4:in `<main>'

是$ LOAD_PATH吗?在搜索答案后,我发现了很多SO答案以及一篇博文(https://codedecoder.wordpress.com/2013/09/23/require-and-load-in-ruby-loaderror-cannot-load-such-file/),似乎表明问题在于gem没有安装在$ LOAD_PATH的目录中。以下是我从IRB运行$LOAD_PATH时看到的内容:

irb(main):002:0> $LOAD_PATH
=> ["/home/dcox/lib/ruby/site_ruby/2.1.0", 
"/home/dcox/lib/ruby/site_ruby/2.1.0/x86_64-linux", 
"/home/dcox/lib/ruby/site_ruby", "/home/dcox/lib/ruby/vendor_ruby/2.1.0", 
"/home/dcox/lib/ruby/vendor_ruby/2.1.0/x86_64-linux", 
"/home/dcox/lib/ruby/vendor_ruby", "/home/dcox/lib/ruby/2.1.0", 
"/home/dcox/lib/ruby/2.1.0/x86_64-linux"]

接下来我查看了ruby-mysql的位置:

dcox@analytics1:~/connector$ bundle show ruby-mysql
/data/home/dcox/connector/vendor/bundle/ruby/2.1.0/gems/ruby-mysql-2.9.14

显然我的connector/vendor/bundle路径不在$ LOAD_PATH上。我可以添加它,但我有一种感觉,我在这里缺少一些简单的东西,因为只要你按照说明捆绑器应该工作,对吧?

非常感谢任何建议或帮助!谢谢!

2 个答案:

答案 0 :(得分:2)

如果您只是想要这个特定的宝石,require 'mysql'应该有效(例如,https://github.com/tmtm/ruby-mysql/blob/master/test/test_mysql.rb#L10)。

答案 1 :(得分:0)

您的文件应致电Bundler.setup http://bundler.io/bundler_setup.html

更好的是,如果您改为呼叫Bundler.require(:default),它将为您设置并要求Gemfile中的所有宝石。