{"id":5762,"date":"2011-06-02T13:57:39","date_gmt":"2011-06-02T05:57:39","guid":{"rendered":"http:\/\/ihower.tw\/blog\/?p=5762"},"modified":"2011-06-07T01:44:33","modified_gmt":"2011-06-06T17:44:33","slug":"rake-0-9-%e7%99%bc%e4%bd%88%ef%bc%8c%e5%a6%82%e4%bd%95%e8%99%95%e7%90%86%e4%b8%8d%e5%90%8c%e7%89%88%e6%9c%ac%e7%9a%84-gem-%e5%9f%b7%e8%a1%8c%e6%aa%94","status":"publish","type":"post","link":"https:\/\/ihower.tw\/blog\/5762-rake-0-9-%e7%99%bc%e4%bd%88%ef%bc%8c%e5%a6%82%e4%bd%95%e8%99%95%e7%90%86%e4%b8%8d%e5%90%8c%e7%89%88%e6%9c%ac%e7%9a%84-gem-%e5%9f%b7%e8%a1%8c%e6%aa%94","title":{"rendered":"\u5982\u4f55\u8655\u7406\u4e0d\u540c\u7248\u672c\u7684 Gem \u57f7\u884c\u6a94\uff0c\u4ee5 Rake 0.9.0 \u5730\u96f7\u70ba\u4f8b"},"content":{"rendered":"<p><strong>Update: Rake 0.9.1 \u56de\u5fa9\u4e86\u9019\u500b\u4e0d\u76f8\u5bb9\u8b8a\u66f4\uff0c\u6539\u6210\u52a0\u4e0a Deprecation \u8b66\u544a\uff1aGlobal access to Rake DSL methods is deprecated.  Please Include    &#8230;  Rake::DSL into classes and modules which use the Rake DSL methods.&#8221;\u3002<\/strong><\/p>\n<p>\u524d\u4e00\u9663\u5b50 <a href=\"https:\/\/github.com\/jimweirich\/rake\/blob\/master\/CHANGES\">Rake 0.9.0<\/a> \u767c\u4f48\u4e86\uff0c\u7d50\u679c\u8b93\u5927\u5bb6\u96de\u98db\u72d7\u8df3\uff0c\u56e0\u70ba\u4ed6\u6709\u500b\u4e0d\u5411\u5f8c\u76f8\u5bb9\u7684 API \u66f4\u52d5\u3002<\/p>\n<p><code><br \/>\n## Version 0.9.0<\/p>\n<p>* *Incompatible* *change*: Rake DSL commands ('task', 'file', etc.)  are<br \/>\n  no longer private methods in Object.  If you need to call 'task :xzy' inside<br \/>\n  your class, include Rake::DSL into the class.  The DSL is still available at<br \/>\n  the top level scope (via the top level object which extends Rake::DSL).<br \/>\n<\/code><\/p>\n<p>\u6240\u4ee5\u4e00\u65e6\u4f60 gem install rake \u5347\u7d1a\u5230 0.9.0\uff0c\u90a3\u9ebc\u6253 rake \u5c31\u662f\u7528\u9019\u500b\u7684\u7248\u672c\uff0c\u78b0\u4e0a\u4f60\u7684\u5c08\u6848\u4e0d\u76f8\u5bb9\u7684\u8a71(\u4f8b\u5982 Rails 3.0.7 \u4e4b\u524d\u7248\u672c\u4e0d\u76f8\u5bb9)\uff0c\u53ef\u4ee5\u600e\u9ebc\u8fa6?<\/p>\n<p>1. \u79fb\u9664 Rake 0.9.0 \u56de\u5230 0.8.7\uff0c\u4f46\u662f\u5e38\u5e38\u6703\u5728\u4e0d\u540c\u74b0\u5883\u4e0b\u53c8\u4e0d\u5c0f\u5fc3\u88dd\u5230\uff0c\u7136\u5f8c\u53c8\u721b\u6389\u4e86\uff0c\u662f\u500b\u4e0d\u592a\u53ef\u9760\u7684\u65b9\u6cd5 XD<\/p>\n<p>2.  \u5982\u679c\u6709\u7528 <a href=\"http:\/\/gembundler.com\/\">Bundler<\/a> \u7684\u8a71\uff0c\u4f60\u53ef\u4ee5\u5728 Gemfile \u4e2d\u6307\u5b9a <code>gem 'rake', '0.8.7'<\/code>\uff0c\u7136\u5f8c\u6bcf\u6b21\u6253 <code>bundle exec rake<\/code> \u5c31\u662f\u7528 0.8.7 \u7684\u7248\u672c\u4e86\u3002BTW\uff0c\u5982\u679c\u6307\u5b9a\u4e86 0.8.7 \u9084\u6253 <code>rake<\/code> \u7684\u8a71\uff0c\u4f60\u6703\u770b\u5230\u4ee5\u4e0b\u932f\u8aa4\uff1a<\/p>\n<p><code><br \/>\nrake aborted!<br \/>\nYou have already activated rake 0.9.0,<br \/>\nbut your Gemfile requires rake 0.8.7.<br \/>\nConsider using bundle exec.<\/p>\n<p>(See full trace by running task with --trace)<br \/>\n<\/code><\/p>\n<p>\u5176\u5be6 Rails developer \u61c9\u8a72\u90fd\u7528 Bundler \u4e86\uff0c\u800c\u4e14\u4e5f\u77e5\u9053 <code>bundler exec<\/code> \u7684\u7528\u9014\uff0c\u4f46\u662f\u76f4\u5230\u9019\u6b21\u4e8b\u4ef6\u524d\u5927\u5bb6\u90fd\u6c92\u7fd2\u6163\u6307\u5b9a rake \u7248\u672c\uff0c\u56e0\u70ba 0.8.7 \u5927\u5bb6\u7528\u4e86\u5169\u5e74\u90fd\u6c92\u4e8b\u554a\uff0c\u6240\u4ee5\u90fd\u7fd2\u6163\u6253 <code>rake<\/code> \u800c\u4e0d\u662f <code>bundle exec rake<\/code>\u3002<\/p>\n<p>2-1. Bundler \u6709\u500b\u529f\u80fd\u662f<code> bundle install --binstubs<\/code>\uff0c\u9019\u6703\u5efa\u7acb\u4e00\u500b bin \u76ee\u9304\u5305\u542b\u6240\u6709 Gemfile \u88e1\u9762\u7528\u7684\u57f7\u884c\u6a94\u3002\u6240\u4ee5\u6539\u6253 <code>bin\/rake<\/code> \u5373\u53ef\u3002<\/p>\n<p>2-2. \u627f\u4e0a\uff0c\u5acc <code>bin\/rake<\/code> \u9084\u662f\u592a\u9ebb\u7169? \u5982\u679c\u4f60\u6709\u7528 <a href=\"https:\/\/rvm.beginrescueend.com\/\">RVM<\/a> \u7684\u8a71\uff0c\u5728\u5c08\u6848\u76ee\u9304\u4e0b\u653e\u500b <a href=\"http:\/\/beginrescueend.com\/workflow\/rvmrc\/\">.rvmrc<\/a> \u52a0\u4e0a <code>export PATH=\".\/bin:$PATH\"<\/code>\uff0c\u9019\u6a23\u53c8\u56de\u5230\u53ea\u8981\u8f38\u5165 <code>rake<\/code> \u5373\u53ef\u3002( .rvmrc \u7684\u4e3b\u8981\u7528\u9014\u662f\u6307\u5b9a\u6b64\u5c08\u6848\u4f7f\u7528\u7684 Ruby \u7248\u672c\uff0c\u4f8b\u5982 <code>rvm ree<\/code>)<\/p>\n<p>3. \u8a66\u8a66 <a href=\"http:\/\/rudygems.com\/post\/6097850437\/rage-not-rake\">Rage<\/a>\uff0c\u9019\u662f\u4e00\u500b script \u6aa2\u67e5\u76ee\u9304\u4e0b\u6709\u6c92\u6709 Gemfile\uff0c\u6709\u7684\u8a71\u7528 <code>bundle exec rake<\/code>\uff0c\u6c92\u6709\u7684\u8a71\u7528 <code>rake<\/code>\u3002<\/p>\n<p>3-1. \u985e\u4f3c\u7684\u65b9\u6cd5\u9084\u6709 <a href=\"http:\/\/effectif.com\/ruby\/automating-bundle-exec\">Automating bundle exec<\/a><\/p>\n<h3>\u53c3\u8003\u8cc7\u6599<\/h3>\n<ul>\n<li><a href=\"http:\/\/blog.davidchelimsky.net\/2011\/05\/28\/rake-09-and-gem-version-constraints\/\">rake 0.9 and gem version constraints<\/a>  (RSpec author)<\/li>\n<li><a href=\"http:\/\/yehudakatz.com\/2011\/05\/30\/gem-versioning-and-bundler-doing-it-right\/\">Gem Versioning and Bundler: Doing it Right<\/a> (Rails3 architect)<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Update: Rake 0.9.1 \u56de\u5fa9\u4e86\u9019\u500b\u4e0d\u76f8\u5bb9\u8b8a\u66f4\uff0c\u6539\u6210\u52a0\u4e0a Deprecation \u8b66\u544a\uff1aGloba &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/ihower.tw\/blog\/5762-rake-0-9-%e7%99%bc%e4%bd%88%ef%bc%8c%e5%a6%82%e4%bd%95%e8%99%95%e7%90%86%e4%b8%8d%e5%90%8c%e7%89%88%e6%9c%ac%e7%9a%84-gem-%e5%9f%b7%e8%a1%8c%e6%aa%94\" class=\"more-link\">\u95b1\u8b80\u5168\u6587<span class=\"screen-reader-text\">\u3008\u5982\u4f55\u8655\u7406\u4e0d\u540c\u7248\u672c\u7684 Gem \u57f7\u884c\u6a94\uff0c\u4ee5 Rake 0.9.0 \u5730\u96f7\u70ba\u4f8b\u3009<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[31],"tags":[],"class_list":["post-5762","post","type-post","status-publish","format-standard","hentry","category-ruby","entry"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p1q6tG-1uW","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts\/5762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/comments?post=5762"}],"version-history":[{"count":39,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts\/5762\/revisions"}],"predecessor-version":[{"id":5913,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/posts\/5762\/revisions\/5913"}],"wp:attachment":[{"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/media?parent=5762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/categories?post=5762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ihower.tw\/blog\/wp-json\/wp\/v2\/tags?post=5762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}