首页 文章

Bundler希望将rails引擎重新安装为gem

提问于
浏览 1665
0

我有一个Rails 4.1项目,在RVM下运行,依赖于Rails引擎 .

在主应用程序的Gemfile中,我引用了引擎:

宝石'车库',路径:'/ srv / webapps / garage'

引擎被部署到该目录,而不是作为打包的.gem文件,但是所有文件都已解压缩 - 它在顶层包含自己的Gemfile,garage.gemspec和目录app lib spec ...

在父应用程序中运行“bundle”时,它会中止此消息:

Errno :: EACCES:权限被拒绝@ rb_sysopen - garage-0.0.6.gem安装车库时出错(0.0.6),Bundler无法继续 . 在捆绑之前确保 gem install garage -v '0.0.6' 成功 .

(该版本号与“车库”引擎声明的版本号相匹配) .

然而,应用程序运行得很好 - 它找到了gem(在Gemfile指向的路径中) .

那么,为什么Bundler试图制作另一个已在本地安装的gem?并且,在什么路径上获得“许可被拒绝” - 这是一个难题,因为我是主应用程序和引擎的部署目录上的每个文件的所有者,并且还具有对/ usr / local / rvm的写入权限 .

1 回答

  • 1

    我今天发现并修复了错误(此应用程序仅在每个月左右部署一次) .

    当Bundler应用程序从其自己的Gemfile指向本地gem时:

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

    ...然后,为了使main_app的Bundle成功,my_gem的顶级目录必须是当前用户可写的 .

    即使它似乎没有对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!
    

相关问题