2014-09-30 71 views
0

我有一個Rails 4.1項目,運行在RVM下,依賴於Rails引擎。Bundler希望重新安裝rails引擎作爲gem

在主應用程序的Gemfile中,我參考發動機:

寶石的車庫',路徑:「/ SRV/web應用/車庫」

發動機被部署到該目錄,而不是作爲一個打包的.gem文件,但所有的文件解壓縮 - 它包含在頂層,它自己的Gemfile,garage.gemspec和目錄應用程序庫規範...

當在父級中運行「包」應用程序,它將中止此消息:

變量Errno :: EACCES:P ermission denied @ rb_sysopen - garage-0.0.6.gem 安裝garage(0.0.6)時發生錯誤,並且Bundler無法繼續。 確保gem install garage -v '0.0.6'在捆綁之前成功。

(即版本號匹配由「車庫」發動機要求保護的版本號)。

然而,應用程序運行得很好 - 它發現寶石(路徑指向的Gemfile中)。

那麼,爲什麼捆紮機試圖使本地已經安裝了寶石的另一個副本?並且,它在什麼路徑上獲得「權限被拒絕」 - 這是一個難題,因爲我是主應用程序和引擎的部署目錄中每個文件的所有者,並且也具有對/ usr/local/rvm的寫入權限。

+0

請發佈命令的輸出_full_你跑了。 – 2014-10-02 05:07:56

+0

Heisenbug?問題沒有復發,但自從最初發布以來,我只部署了一次這個應用程序。如果它再次發生,我會在這裏返回更詳細的信息。 – 2014-11-12 20:41:19

+0

看看這個寶石,它可以幫助從本地來源的寶石工作:https://github.com/EPI-USE-Labs/git-bundle – 2016-07-01 16:25:14

回答

1

我今天發現並修復了這個錯誤(這個程序每個月只能部署一次)。

當捆紮機應用點從自己的Gemfile本地寶石:

# main_app/Gemfile: 
gem 'my_gem', path: '/srv/webapps/my_gem' 

...然後main_app的包是成功的,my_gem的頂級目錄MUST是當前可寫用戶。

儘管它似乎沒有對my_gem的目錄進行持久更改,但顯然某種臨時文件是在my_gem的頂層創建並銷燬的。 (大概my_gem-0.0.6.gem,該錯誤消息指示 - !不幸的是不包括完整的路徑,這就是使所有的差異)

$ chmod -R a-w /srv/webapps/my_gem 

$ cd /srv/webapps/main_app 

$ bundle 
Errno::EACCES: Permission denied @ rb_sysopen - my_gem-0.0.6.gem 

# making the gem's Gemfile writable has no effect 
$ chmod a+w /srv/webapps/my_gem/Gemfile* 
$ bundle 
Errno::EACCES: Permission denied @ rb_sysopen - my_gem-0.0.6.gem 

# but making the top level directory writable does work: 
$ chmod a+w /srv/webapps/my_gem 
$ bundle 
Using my_gem 0.0.6 from source at /srv/webapps/my_gem 
Your bundle is complete!