{"id":41999,"date":"2023-01-22T18:16:02","date_gmt":"2023-04-02T11:26:37","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/"},"modified":"2024-04-29T10:55:12","modified_gmt":"2024-04-29T02:55:12","slug":"%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/","title":{"rendered":"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f"},"content":{"rendered":"<p>\u6211\u60f3\u5728\u542f\u52a8Rails\u670d\u52a1\u5668\u540e\u65e0\u6cd5\u8fde\u63a5\u5230\u6570\u636e\u5e93\u7684\u60c5\u51b5\u4f1a\u5076\u5c14\u53d1\u751f\uff0c\u4f60\u4eec\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u4f1a\u600e\u4e48\u5904\u7406\u5462\uff1f?? \u6211\u60f3\u6709\u4e00\u79cd\u65b9\u5f0f\u662f\u901a\u8fc7\u641c\u7d22\u9519\u8bef\u6d88\u606f\u6765\u5c1d\u8bd5\u5404\u79cd\u65b9\u6cd5\uff0c\u8fd8\u6709\u4e00\u79cd\u65b9\u5f0f\u662f\u7528\u5185\u5fc3\u6765\u8fdb\u884c\u8c03\u8bd5\u3002<\/p>\n<p>\u6839\u636e\u6bcf\u4e2a\u4eba\u7684\u60c5\u51b5\u548c\u73af\u5883\uff0c\u5e94\u91c7\u53d6\u7684\u884c\u52a8\u53ef\u80fd\u4e0d\u540c\uff0c\u4f46\u6211\u901a\u5e38\u4f1a\u9009\u62e9\u201c\u5c3d\u91cf\u8ffd\u8e2a\u5b98\u65b9\u4fe1\u606f\u6765\u89e3\u51b3\u95ee\u9898\u201d\u3002\u6211\u8ba4\u4e3a\u6709\u5f88\u591a\u4e0d\u540c\u7684\u65b9\u6cd5\u90fd\u5f88\u597d\uff0c\u5e0c\u671b\u8fd9\u4e2a\u65b9\u6cd5\u80fd\u591f\u7ed9\u4f60\u4e00\u4e9b\u53c2\u8003(\uff1e\u4eba\uff1c )\u2728<\/p>\n<h2>\u300c\u51fa\u73b0\u4e86\u67d0\u79cd\u9519\u8bef\uff01\u300d\u7136\u540e\u8fdb\u884c\u539f\u56e0\u8c03\u67e5\u548c\u5bf9\u7b56\u4e3e\u4f8b\u3002<\/h2>\n<p>\u672c\u6b21\u6211\u5c06\u4ee5\u6211\u5b9e\u9645\u9047\u5230\u7684\u4f8b\u5b50\u4e3a\u57fa\u7840\uff0c\u4ece\u9047\u5230\u9519\u8bef\u7684\u5730\u65b9\u5f00\u59cb\uff0c\u9010\u4e00\u8c03\u67e5\u539f\u56e0\uff0c\u5e76\u6700\u7ec8\u89e3\u51b3\u95ee\u9898\u7684\u6d41\u7a0b\u4e00\u4e00\u603b\u7ed3\u8d77\u6765\u3002\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0c\u672c\u6b21\u7684\u984c\u6750\u662f\u8fd9\u4e2aRails\u5e94\u7528\u7a0b\u5e8f\u3002<\/p>\n<p>CoderDojo Japan &#8211; \u4e3a\u513f\u7ae5\u63d0\u4f9b\u7684\u7f16\u7a0b\u8bad\u7ec3\u573a\u6240<br \/>\nhttps:\/\/coderdojo.jp\/<\/p>\n<p>GitHub &#8211; coderdojo-japan\/coderdojo.jp (OSS)<br \/>\nhttps:\/\/github.com\/coderdojo-japan\/coderdojo.jp<\/p>\n<p>GitHub &#8211; coderdojo-japan\/coderdojo.jp\uff08\u5f00\u6e90\u8f6f\u4ef6\uff09<br \/>\nhttps:\/\/github.com\/coderdojo-japan\/coderdojo.jp<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"Kobito.sISNA2.png\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4a0b37434c4406cb1a9d\/6-0.png\" alt=\"Kobito.sISNA2.png\" \/><\/div>\n<p>\u9996\u5148\u8981\u4ece\u9047\u5230\u9519\u8bef\u5f00\u59cb\u3002<\/p>\n<h3>\u9519\u8bef\u7684\u906d\u9047<\/h3>\n<pre class=\"post-pre\"><code>\u256d\u2500\u25cb yasulab \u20392.5.3\u203a ~\/coderdojo.jp\r\n\u2570\u2500\u25cb rails s\r\n\r\nWARNING: Nokogiri was built against LibXML version 2.9.7, but has dynamically loaded 2.9.4\r\n<span class=\"o\">=&gt;<\/span> Booting WEBrick\r\n<span class=\"o\">=&gt;<\/span> Rails 5.1.6.1 application starting <span class=\"k\">in <\/span>development on http:\/\/localhost:3000\r\n<span class=\"o\">=&gt;<\/span> Run <span class=\"sb\">`<\/span>rails server <span class=\"nt\">-h<\/span><span class=\"sb\">`<\/span> <span class=\"k\">for <\/span>more startup options\r\n<span class=\"o\">[<\/span>2018-12-27 11:55:12] INFO  WEBrick 1.4.2\r\n<span class=\"o\">[<\/span>2018-12-27 11:55:12] INFO  ruby 2.5.3 <span class=\"o\">(<\/span>2018-10-18<span class=\"o\">)<\/span> <span class=\"o\">[<\/span>x86_64-darwin17]\r\n<span class=\"o\">[<\/span>2018-12-27 11:55:12] INFO  WEBrick::HTTPServer#start: <span class=\"nv\">pid<\/span><span class=\"o\">=<\/span>12570 <span class=\"nv\">port<\/span><span class=\"o\">=<\/span>3000\r\n\r\nStarted GET <span class=\"s2\">\"\/\"<\/span> <span class=\"k\">for<\/span> ::1 at 2018-12-27 11:55:15 +0900\r\nPG::ConnectionBad <span class=\"o\">(<\/span>could not connect to server: No such file or directory <span class=\"c\"># &lt;= \u30b3\u30ec\u3063\u307d\u3044 ?<\/span>\r\n    Is the server running locally and accepting\r\n    connections on Unix domain socket <span class=\"s2\">\"\/tmp\/.s.PGSQL.5432\"<\/span>?\r\n<span class=\"o\">)<\/span>:\r\n<\/code><\/pre>\n<p>\u4ece\u9519\u8bef\u4fe1\u606f\u4e2d\u53ef\u4ee5\u770b\u51fa\uff0c\u95ee\u9898\u662f\u7531PG (PostgreSQL) \u5bfc\u81f4\u7684\u3002\u4f46\u4ec5\u51ed\u4ee5\u4e0a\u4fe1\u606f\u8fd8\u65e0\u6cd5\u786e\u5b9a\u4e3a\u4f55\u65e0\u6cd5\u8fde\u63a5\u5230\u6570\u636e\u5e93\uff0c\u6240\u4ee5\u6682\u65f6\u5148\u68c0\u67e5\u4e00\u4e0b PostgreSQL \u662f\u5426\u6b63\u5728\u8fd0\u884c\u3002<\/p>\n<h3>\u67e5\u8be2PostgreSQL\u7684\u5f53\u524d\u72b6\u6001<\/h3>\n<pre class=\"post-pre\"><code>\u256d\u2500\u25cb yasulab \u20392.5.3\u203a ~\/coderdojo.jp\r\n\u2570\u2500\u25cb pg_ctl <span class=\"nt\">-D<\/span> \/usr\/local\/var\/postgres start <span class=\"c\"># \u30d1\u30b9\u306f\u74b0\u5883\u306b\u3088\u3063\u3066\u9055\u3046<\/span>\r\n\r\nwaiting <span class=\"k\">for <\/span>server to start....2018-12-28 19:53:07.847 EST <span class=\"o\">[<\/span>5097] FATAL:  database files are incompatible with server\r\n2018-12-28 19:53:07.847 EST <span class=\"o\">[<\/span>5097] DETAIL:  The data directory was initialized by PostgreSQL version 10, which is not compatible with this version 11.1.  <span class=\"c\"># &lt;= \u30b3\u30ec\u304c\u539f\u56e0\u3063\u307d\u3044 ?<\/span>\r\n stopped waiting\r\npg_ctl: could not start server\r\nExamine the log output.\r\n<\/code><\/pre>\n<p>\u5f53\u8c03\u67e5\u4e86\u72b6\u6001\u540e\uff0c\u6211\u53d1\u73b0\u672c\u6b21\u60c5\u51b5\u662f\u56e0\u4e3a\u201c\u6570\u636e\u5e93\u7248\u672c\u4e0d\u540c\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u6b63\u5e38\u8fd0\u884c\uff08\u53d8\u5f97\u4e0d\u517c\u5bb9\uff09\u201d\u8fd9\u4e2a\u539f\u56e0\u3002\u539f\u6765\u5982\u6b64\uff01\u6211\u8bb0\u5f97\u6700\u8fd1\u6267\u884c\u8fc7brew update\u548cbrew upgrade\uff0c\u6240\u4ee5\u53ef\u80fd\u662f\u5b83\u4eec\u5bfc\u81f4\u7684\u3002<\/p>\n<p>\u5347\u7ea7\u7248\u672c\u65f6\u6211\u901a\u5e38\u4f7f\u7528Homebrew\uff0c\u5e76\u901a\u8fc7Homebrew\u8bbf\u95ee\u5b98\u65b9\u4fe1\u606f\uff0c\u53ef\u4ee5\u627e\u5230\u4e00\u4e9b\u4e0d\u9519\u7684\u4fe1\u606f\uff08\u5b98\u65b9\u4fe1\u606f\u901a\u5e38\u5305\u542b\u7b80\u6d01\u660e\u4e86\u7684\u56de\u7b54\uff0c\u7ed9\u4eba\u7559\u4e0b\u4e86\u826f\u597d\u7684\u5370\u8c61\uff09??<\/p>\n<h3>\u901a\u8fc7Homebrew\uff0c\u8bbf\u95ee\u5b98\u65b9\u4fe1\u606f\u7684\u65b9\u6cd5<\/h3>\n<pre class=\"post-pre\"><code>\u256d\u2500\u25cb yasulab \u20392.5.3\u203a ~\/coderdojo.jp\r\n\u2570\u2500\u25cb brew info postgresql\r\n\r\npostgresql: stable 11.1 <span class=\"o\">(<\/span>bottled<span class=\"o\">)<\/span>, HEAD\r\nObject-relational database system\r\nhttps:\/\/www.postgresql.org\/\r\nConflicts with:\r\n  postgres-xc <span class=\"o\">(<\/span>because postgresql and postgres-xc <span class=\"nb\">install <\/span>the same binaries.<span class=\"o\">)<\/span>\r\n\/usr\/local\/Cellar\/postgresql\/10.4 <span class=\"o\">(<\/span>3,389 files, 39.2MB<span class=\"o\">)<\/span>\r\n  Poured from bottle on 2018-07-25 at 23:24:07\r\n\/usr\/local\/Cellar\/postgresql\/11.1 <span class=\"o\">(<\/span>3,548 files, 40.3MB<span class=\"o\">)<\/span> <span class=\"k\">*<\/span>\r\n  Poured from bottle on 2018-12-23 at 12:30:47\r\nFrom: https:\/\/github.com\/Homebrew\/homebrew-core\/blob\/master\/Formula\/postgresql.rb\r\n<span class=\"o\">==&gt;<\/span> Dependencies\r\nBuild: pkg-config \u2714\r\nRequired: icu4c \u2714, openssl \u2714, readline \u2714\r\nOptional: python \u2718\r\n<span class=\"o\">==&gt;<\/span> Options\r\n<span class=\"nt\">--with-python<\/span>\r\n    Enable PL\/Python3\r\n<span class=\"nt\">--HEAD<\/span>\r\n    Install HEAD version\r\n<span class=\"o\">==&gt;<\/span> Caveats\r\nTo migrate existing data from a previous major version of PostgreSQL run:\r\n  brew postgresql-upgrade-database <span class=\"c\"># &lt;= \u3044\u3044\u611f\u3058\u306e\u56de\u7b54\u3092\u898b\u3064\u3051\u305f! ?\u2728<\/span>\r\n\r\nTo have launchd start postgresql now and restart at login:\r\n  brew services start postgresql\r\nOr, <span class=\"k\">if <\/span>you don<span class=\"s1\">'t want\/need a background service you can just run:\r\n  pg_ctl -D \/usr\/local\/var\/postgres start\r\n==&gt; Analytics\r\ninstall: 88,258 (30 days), 185,674 (90 days), 701,483 (365 days)\r\ninstall_on_request: 75,475 (30 days), 163,418 (90 days), 594,559 (365 days)\r\nbuild_error: 0 (30 days)\r\n<\/span><\/code><\/pre>\n<p>\u6211\u627e\u5230\u4e86\u4e00\u4e2a\u5f88\u597d\u7684\u56de\u7b54\uff01\u5230\u8fd9\u4e2a\u5730\u6b65\uff0c\u5c31\u597d\u50cf\u53d8\u6210\u4e86\u201c\u8d62\u4e86 (\u5b8c)\u201d\u7684\u611f\u89c9\uff0c\u4f46\u6211\u4eec\u8981\u4fdd\u6301\u8b66\u60d5\uff0c\u6309\u7167\u5b98\u65b9\u4fe1\u606f\u505a\u51fa\u5e94\u5bf9\u3002<\/p>\n<p>\u8bf7\u6ce8\u610f\uff1a\u6309\u7167\u516c\u5f0f\u4fe1\u606f\u8fdb\u884c\u9002\u5f53\u8c03\u6574\u5f88\u53ef\u80fd\u4fee\u590d\u95ee\u9898\uff0c\u4f46\u5728\u66f4\u590d\u6742\u7684\u73af\u5883\u4e2d\u53ef\u80fd\u4e0d\u53ea\u6709\u4e00\u4e2a\u539f\u56e0\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6309\u7167\u4e0a\u8ff0\u65b9\u5f0f\uff0c\u9010\u4e2a\u67e5\u770b\u516c\u5f0f\u4fe1\u606f\u5e76\u8fdb\u884c\u5904\u7406\u4f3c\u4e4e\u662f\u4e2a\u4e0d\u9519\u7684\u65b9\u6cd5\u3002<\/p>\n<h3>\u6309\u7167\u516c\u5f0f\u4fe1\u606f\u8fdb\u884c\u5904\u7406\u3002<\/h3>\n<pre class=\"post-pre\"><code>\u256d\u2500\u25cb yasulab \u20392.5.3\u203a ~\/coderdojo.jp\r\n\u2570\u2500\u25cb brew postgresql-upgrade-database\r\n\r\n<span class=\"o\">==&gt;<\/span> brew <span class=\"nb\">install <\/span>postgresql@10\r\n<span class=\"o\">==&gt;<\/span> Downloading https:\/\/homebrew.bintray.com\/bottles\/postgresql@10-10.6.mojave.bottle.tar.gz\r\n<span class=\"c\">######################################################################## 100.0%<\/span>\r\n<span class=\"o\">==&gt;<\/span> Pouring postgresql@10-10.6.mojave.bottle.tar.gz\r\n<span class=\"o\">==&gt;<\/span> Caveats\r\nTo migrate existing data from a previous major version of PostgreSQL run:\r\n  brew postgresql-upgrade-database\r\n\r\npostgresql@10 is keg-only, which means it was not symlinked into \/usr\/local,\r\nbecause this is an alternate version of another formula.\r\n\r\nIf you need to have postgresql@10 first <span class=\"k\">in <\/span>your PATH run:\r\n  <span class=\"nb\">echo<\/span> <span class=\"s1\">'export PATH=\"\/usr\/local\/opt\/postgresql@10\/bin:$PATH\"'<\/span> <span class=\"o\">&gt;&gt;<\/span> ~\/.zshrc\r\n\r\nFor compilers to find postgresql@10 you may need to <span class=\"nb\">set<\/span>:\r\n  <span class=\"nb\">export <\/span><span class=\"nv\">LDFLAGS<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"-L\/usr\/local\/opt\/postgresql@10\/lib\"<\/span>\r\n  <span class=\"nb\">export <\/span><span class=\"nv\">CPPFLAGS<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"-I\/usr\/local\/opt\/postgresql@10\/include\"<\/span>\r\n\r\nFor pkg-config to find postgresql@10 you may need to <span class=\"nb\">set<\/span>:\r\n  <span class=\"nb\">export <\/span><span class=\"nv\">PKG_CONFIG_PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\/usr\/local\/opt\/postgresql@10\/lib\/pkgconfig\"<\/span>\r\n\r\n\r\nTo have launchd start postgresql@10 now and restart at login:\r\n  brew services start postgresql@10\r\nOr, <span class=\"k\">if <\/span>you don<span class=\"s1\">'t want\/need a background service you can just run:\r\n  pg_ctl -D \/usr\/local\/var\/postgres@10 start\r\n==&gt; Summary\r\n?  \/usr\/local\/Cellar\/postgresql@10\/10.6: 1,706 files, 20.8MB\r\n==&gt; Upgrading postgresql data from 10 to 11...\r\nStopping `postgresql`... (might take a while)\r\n==&gt; Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)\r\n==&gt; Moving postgresql data from \/usr\/local\/var\/postgres to \/usr\/local\/var\/postgres.old...\r\nThe files belonging to this database system will be owned by user \"yasulab\".\r\nThis user must also own the server process.\r\n\r\nThe database cluster will be initialized with locale \"en_US.UTF-8\".\r\nThe default database encoding has accordingly been set to \"UTF8\".\r\nThe default text search configuration will be set to \"english\".\r\n\r\nData page checksums are disabled.\r\n\r\nfixing permissions on existing directory \/usr\/local\/var\/postgres ... ok\r\ncreating subdirectories ... ok\r\nselecting default max_connections ... 100\r\nselecting default shared_buffers ... 128MB\r\nselecting dynamic shared memory implementation ... posix\r\ncreating configuration files ... ok\r\nrunning bootstrap script ... ok\r\nperforming post-bootstrap initialization ... ok\r\nsyncing data to disk ... ok\r\n\r\nWARNING: enabling \"trust\" authentication for local connections\r\nYou can change this by editing pg_hba.conf or using the option -A, or\r\n--auth-local and --auth-host, the next time you run initdb.\r\n\r\nSuccess. You can now start the database server using:\r\n\r\n    \/usr\/local\/opt\/postgresql\/bin\/pg_ctl -D \/usr\/local\/var\/postgres -l logfile start\r\n\r\nPerforming Consistency Checks\r\n-----------------------------\r\nChecking cluster versions                                   ok\r\nChecking database user is the install user                  ok\r\nChecking database connection settings                       ok\r\nChecking for prepared transactions                          ok\r\nChecking for reg* data types in user tables                 ok\r\nChecking for contrib\/isn with bigint-passing mismatch       ok\r\nCreating dump of global objects                             ok\r\nCreating dump of database schemas\r\n                                                            ok\r\nChecking for presence of required libraries                 ok\r\nChecking database user is the install user                  ok\r\nChecking for prepared transactions                          ok\r\n\r\nIf pg_upgrade fails after this point, you must re-initdb the\r\nnew cluster before continuing.\r\n\r\nPerforming Upgrade\r\n------------------\r\nAnalyzing all rows in the new cluster                       ok\r\nFreezing all rows in the new cluster                        ok\r\nDeleting files from new pg_xact                             ok\r\nCopying old pg_xact to new server                           ok\r\nSetting next transaction ID and epoch for new cluster       ok\r\nDeleting files from new pg_multixact\/offsets                ok\r\nCopying old pg_multixact\/offsets to new server              ok\r\nDeleting files from new pg_multixact\/members                ok\r\nCopying old pg_multixact\/members to new server              ok\r\nSetting next multixact ID and offset for new cluster        ok\r\nResetting WAL archives                                      ok\r\nSetting frozenxid and minmxid counters in new cluster       ok\r\nRestoring global objects in the new cluster                 ok\r\nRestoring database schemas in the new cluster\r\n                                                            ok\r\nCopying user relation files\r\n                                                            ok\r\nSetting next OID for new cluster                            ok\r\nSync data directory to disk                                 ok\r\nCreating script to analyze new cluster                      ok\r\nCreating script to delete old cluster                       ok\r\n\r\nUpgrade Complete\r\n----------------\r\nOptimizer statistics are not transferred by pg_upgrade so,\r\nonce you start the new server, consider running:\r\n    .\/analyze_new_cluster.sh\r\n\r\nRunning this script will delete the old cluster'<\/span>s data files:\r\n    .\/delete_old_cluster.sh\r\n<span class=\"o\">==&gt;<\/span> Upgraded postgresql data from 10 to 11!\r\n<span class=\"o\">==&gt;<\/span> Your postgresql 10 data remains at \/usr\/local\/var\/postgres.old\r\n<span class=\"o\">==&gt;<\/span> Successfully started <span class=\"sb\">`<\/span>postgresql<span class=\"sb\">`<\/span> <span class=\"o\">(<\/span>label: homebrew.mxcl.postgresql<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u6709\u5f88\u591a\u5192\u6ce1\u51fa\u6765\uff0c\u6240\u4ee5\u770b\u8d77\u6765\u597d\u50cf\u4fee\u597d\u4e86\u5462 \u263a\ufe0f<\/p>\n<p>\u5f53\u6211\u5c1d\u8bd5\u91cd\u65b0\u542f\u52a8Rails\u670d\u52a1\u5668\u65f6\uff0c\u8fd9\u6b21\u987a\u5229\u4e86;)<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"Kobito.lE1geG.png\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4a0b37434c4406cb1a9d\/23-0.png\" alt=\"Kobito.lE1geG.png\" \/><\/div>\n<p>\u4f60\u89c9\u5f97\u600e\u4e48\u6837\u5462\uff1f? \u6211\u89c9\u5f97\u8fd8\u6709\u5176\u4ed6\u5f88\u591a\u8c03\u8bd5\u65b9\u6cd5\uff0c\u4f46\u5982\u679c\u80fd\u5bf9\u4f60\u63d0\u4f9b\u4e00\u4e2a\u601d\u8def\u7684\u53c2\u8003\uff0c\u6211\u4f1a\u5f88\u9ad8\u5174\u7684 (\uff1e\u4eba\uff1c )\u2728<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u60f3\u5728\u542f\u52a8Rails\u670d\u52a1\u5668\u540e\u65e0\u6cd5\u8fde\u63a5\u5230\u6570\u636e\u5e93\u7684\u60c5\u51b5\u4f1a\u5076\u5c14\u53d1\u751f\uff0c\u4f60\u4eec\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u4f1a\u600e\u4e48\u5904\u7406\u5462\uff1f?? \u6211\u60f3\u6709\u4e00 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-41999","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u65e0\u6cd5\u5728rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f\" \/>\n<meta property=\"og:description\" content=\"\u6211\u60f3\u5728\u542f\u52a8Rails\u670d\u52a1\u5668\u540e\u65e0\u6cd5\u8fde\u63a5\u5230\u6570\u636e\u5e93\u7684\u60c5\u51b5\u4f1a\u5076\u5c14\u53d1\u751f\uff0c\u4f60\u4eec\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u4f1a\u600e\u4e48\u5904\u7406\u5462\uff1f?? \u6211\u60f3\u6709\u4e00 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u65e0\u6cd5\u5728rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-02T11:26:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T02:55:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4a0b37434c4406cb1a9d\/6-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/\",\"name\":\"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-04-02T11:26:37+00:00\",\"dateModified\":\"2024-04-29T02:55:12+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u65e0\u6cd5\u5728rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f","og_description":"\u6211\u60f3\u5728\u542f\u52a8Rails\u670d\u52a1\u5668\u540e\u65e0\u6cd5\u8fde\u63a5\u5230\u6570\u636e\u5e93\u7684\u60c5\u51b5\u4f1a\u5076\u5c14\u53d1\u751f\uff0c\u4f60\u4eec\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u901a\u5e38\u4f1a\u600e\u4e48\u5904\u7406\u5462\uff1f?? \u6211\u60f3\u6709\u4e00 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5f53\u65e0\u6cd5\u5728rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-04-02T11:26:37+00:00","article_modified_time":"2024-04-29T02:55:12+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4a0b37434c4406cb1a9d\/6-0.png"}],"author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/","name":"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-04-02T11:26:37+00:00","dateModified":"2024-04-29T02:55:12+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5f53\u65e0\u6cd5\u5728Rails\u4e2d\u8fde\u63a5\u5230\u6570\u636e\u5e93\u65f6\uff0c\u5728\u6b64\u63d0\u4f9b\u4e00\u79cd\u601d\u8003\u65b9\u5f0f"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%bd%93%e6%97%a0%e6%b3%95%e5%9c%a8rails%e4%b8%ad%e8%bf%9e%e6%8e%a5%e5%88%b0%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%ef%bc%8c%e5%9c%a8%e6%ad%a4%e6%8f%90%e4%be%9b%e4%b8%80%e7%a7%8d%e6%80%9d%e8%80%83\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/41999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=41999"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/41999\/revisions"}],"predecessor-version":[{"id":84850,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/41999\/revisions\/84850"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=41999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=41999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=41999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}