簡體   English   中英

Ruby腳本無法加載通過捆綁程序安裝的gem

[英]Ruby script cannot load a gem installed via bundler

我正在嘗試將ruby-mysql gem包含在我的ruby腳本中。 我已經使用bundler安裝了gem,但是當我運行bundle exec ./mysql_connector ,在./mysql_connector:4:in ``require': cannot load such file -- ruby-mysql (LoadError)收到錯誤./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-非根目錄/

為我的應用程序創建了一個目錄。 我的應用程序位於我的主目錄中的一個名為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-可執行文件/

運行腳本。 我使用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上。 我可以添加它,但是我感覺這里缺少一些簡單的東西,因為只要您按照說明進行操作,捆綁程序就可以正常工作,對嗎?

任何建議或幫助都非常感謝! 謝謝!!

如果您只需要此特定的gem,則require 'mysql'應該可以工作(例如, https : //github.com/tmtm/ruby-mysql/blob/master/test/test_mysql.rb#L10 )。

您的文件應調用Bundler.setup http://bundler.io/bundler_setup.html

更好的是,如果您改為調用Bundler.require(:default) ,它將設置並要求您Gemfile中的所有gem。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM