【问题标题】:How to edit a gem and then use that version in your Sinatra app on Heroku如何编辑 gem,然后在 Heroku 上的 Sinatra 应用程序中使用该版本
【发布时间】:2012-03-15 20:41:45
【问题描述】:

我正在尝试在 Heroku 上部署的 Sinatra 应用程序中加载 dm-paperclip gem 的编辑版本。我在https://github.com/ladicha/dm-paperclip/commit/8ff8d235edf03c7c21c49c0103c5b013d543d406 下载了编辑后的 ​​gem。

在我的 Gemfile 中,我为 dm-paperclip 添加了一个 :path 参数

gem 'dm-paperclip', :path => "#{Dir.pwd}/gems/ladicha-dm-paperclip-8ff8d23"

当我推送到 Heroku 时,捆绑器运行时没有错误。关于 dm-paperclip gem heroku 的打包报告

Using dm-paperclip (2.4.1) from source at gems/ladicha-dm-paperclip-8ff8d23

应用程序随后被部署,但崩溃了。我相信日志中的相关行是

 <internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- dm-paperclip (LoadError)

我指向 :path 到 'dm-paperclip.gemspec' 的位置,我认为这是正确的。有人看到我做错了吗?如果您需要更多信息,我很乐意提供。

谢谢。

【问题讨论】:

    标签: path heroku sinatra paperclip gemfile


    【解决方案1】:

    也许我在这里回避了在 heroku 上使用 :path gems 的问题,但这对你有用吗?

    gem 'dm-paperclip', :git => 'https://github.com/ladicha/dm-paperclip.git'
    

    至于为什么它不起作用,我肯定会警惕在 Gemfile 中使用Dir.pwdFile.dirname(__FILE__) 可能是一个可行的替代方案,但它仍然比 git 选项更脏。

    【讨论】:

    • 不,你没有回避这个问题,我同意使用 git 方法更好。这是一个学习过程,后来我意识到“正确”的做法是直接链接到 git fork。唉,我仍然让应用程序崩溃并出现同样的错误。不知道这笔交易是什么。我通过切换到运行 ruby​​ 1.8.7 的竹堆栈来解决它,就像我在开发中使用的那样。 Heroku 和 dm-paperclip 现在似乎表现得很好。我认为最终的解决方案是放弃 dm-datamapper,因为它在 2 年内没有被触及。谢谢马特!
    • 你认为我的全部问题是我在 Ruby 1.8.7 中开发了应用程序,并且正在推送到运行 1.9.2 的 Heroku 上的堆栈吗?
    • @three 我可能会切换到carrierwave。
    • @wuliwong,不,在这种情况下,不要认为 1.8 和 1.9 之间的区别很重要。
    • 实际上可能相差 1.8/1.9。 1.9 不包括“。”在加载路径中。如果 dm-paperclip 中的代码假定它是,那可能是错误的根源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 2012-06-28
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多