2014-09-30 54 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!