私の環境
Vanilla Ubuntu 12.10、rvmまたはrenvなし。
> gem --version
1.8.23
> ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
> bundle --version
Bundler version 1.2.1
私の問題
gemをパッケージ化して、開発サーバーと本番サーバーにアップロードするためのrakeタスクがあります。問題は、Gemfileにgitまたはpath gemが含まれていると、rakeタスクが失敗することです。Bundlerはすでにこれらのタイプのgemのパッケージ化をサポートしており、私の端末ではうまく機能しますが、rakeタスクを使用して実行すると失敗し、理由がわかりません。
私のレーキタスク
> cat lib/tasks/upload.rake
namespace :deploy do
desc "Package all gems and upload to remote server"
task :upload => [:environment] do |t, args|
if ! system("bundle package --all")
raise "TOTAL FAIL"
end
# Magic method to upload vendor/cache to remote server
end
end
私の試み
ターミナルでバンドルパッケージを実行すると、次のように機能します。
> bundle package --all
....
Using bson (1.7.0)
Using bson_ext (1.7.0)
Using cancan (1.6.8) from git://github.com/ryanb/cancan.git (at /home/ryujin/Projects/rails/Encluster4/vendor/cache/cancan-4dcd54459482)
Using carrierwave (0.7.0)
Using coffee-script-source (1.4.0)
....
Updating files in vendor/cache
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Updating files in vendor/cache
irbを使用してバンドルパッケージを実行することもできます。
> irb
irb> system("bundle package --all")
...
Using ansi (1.4.3)
Using bson (1.7.0)
Using bson_ext (1.7.0)
Using cancan (1.6.8) from git://github.com/ryanb/cancan.git (at /home/ryujin/Projects/rails/Encluster4/vendor/cache/cancan-4dcd54459482)
Using carrierwave (0.7.0)
Using coffee-script-source (1.4.0)
...
Updating files in vendor/cache
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Updating files in vendor/cache
=> true
しかし、バンドルパッケージは、私の単純なrakeタスク内で実行すると機能しません。
> bundle exec rake deploy:upload
Updating files in vendor/cache
Could not find cancan-1.6.8.gem for installation
rake aborted!
TOTAL FAIL
Tasks: TOP => deploy:upload
(See full trace by running task with --trace)
これが失敗する理由はわかりません。私はいつも同じ環境で走っています。バンドルexecファイルが3つのケースすべてで同じ(/ usr / local / bin / bundle)であることをすでに確認しました。トレースもrvmもrenvもそのようなものはありません。また、bundleexecを使用せずにタスクを実行してみました。同じ問題が発生しました。
これが発生する理由に関するヒントを事前に感謝します。