【问题标题】:Rails3.1: Is this the right way to require my locally being developed gem/engine in the Gemfile?Rails3.1:这是要求我在 Gemfile 中本地开发的 gem/engine 的正确方法吗?
【发布时间】:2012-09-26 08:53:19
【问题描述】:

仍在潜入开发我自己的 gem/引擎的有趣(但有点令人困惑)的世界。

我已经成功部署到我的(私人)GitHub账号了,但是由于gem在持续开发中,我不想一次又一次地部署它然后做bundle update等,所以我找到了通过指定这样的路径来要求 gem 的选项:

gem 'my_gem', path: 'path/to/my/gem'

这在开发时工作得很好(当rails s 正在运行时,它甚至似乎从 gem 重新加载更改的文件[至少对于助手和视图来说它似乎这样做了,还没有使用控制器和模型,但希望这个对他们来说也是如此],这对于在主机 Rails 应用程序中直接使用引擎的同时开发引擎非常有用)。

但是在部署到生产服务器时,我想从 github 获取 gem:

gem 'my_gem', git: "git@github.com:my_company/my_gem"

遗憾的是,bundler 不允许多次需要 gem(即使它们位于单独的 development/testproduction 组中),所以我正在执行以下操作:

if File.directory?('../my_gem')
  gem 'my_gem', path: '../my_gem'
else
  gem 'my_gem', git: "git@github.com:my_company/my_gem.git"
end

到目前为止,这似乎运行良好(但尚未使用 Capistrano 测试部署)。但它留下了一些问题:

1) 这是解决我的问题的“正确”方法吗?似乎有点奇怪,我还没有找到更简单的方法,比如:

gem 'my_gem', path: '../my_gem', git: "git@github.com:my_company/my_gem.git"

...我希望 bundler 首先尝试 :path 选项,如果它不可用,则尝试 :git 选项。但据我所知,这样做时,它只使用:git 选项。

2) 像这样开发 gems 是一种好习惯吗?我正在从我的主机应用程序中提取一些功能到一个引擎中,同时,我正在增强这个功能。所以我在我的主机应用程序中加载了引擎 gem,并从我的主机应用程序中更改引擎的代码(感谢上帝!)反映在我的主机应用程序中,而无需重新启动 rails 服务器。这感觉很“正确”,但由于在创建的引擎中有一个虚拟的 Rails 应用程序,我有点不确定我是否应该开发我的引擎与我的主机应用程序严格隔离,或者不。我认为这是一个哲学问题,但也许有人对此有意见并可以发表利弊?

3) 我如何告诉 Capistrano 始终自动从 GitHub 将我自己的 gem 更新到最新版本?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 gem bundler rails-engines


    【解决方案1】:

    你可以的

    if ENV['RAILS_ENV'] != "development"
      gem 'my_gem', git: "git@github.com:my_company/my_gem.git"
    else
      gem 'my_gem', path: '../my_gem'
    end
    

    假设 RAILS_ENV 被传递到 bundle 命令中(使用 capistrano 时也是如此)。

    要将您的 gem 更新到最新版本,请尝试制作一个基本上可以执行此操作的 capistrano 任务

    /path/to/bundler update my_gem
    

    我真的无法评论你的其他观点。只是我的 2 美分。

    【讨论】:

    • 谢谢,这是有用的信息。不过我会等待更多的答案。 :)
    • 使用if ENV['RAILS_ENV'] == "production"不是更好吗?因为在测试环境中我也想使用 dev gem。
    • 我认为ENV['RAILS_ENV'] 可能不会传入测试环境。但我做了!= "development" 以防万一你有一个暂存环境。
    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多