Yesod app on keter with read-only access to DB











up vote
1
down vote

favorite












I have couple yesod apps deployed using keter with PostgreSQL. The thing I really like about them is the automatic DB migration that happens on deployment.



But, now I have faced a small problem: I set up DB replica on another virtual machine; the second DB is slave and thus read-only. When I start keter with my apps deployed, the apps cannot start because they cannot successfully execute migration script. There are dummy changes only, no real change of table, but the app fails to start with
"cannot execute ALTER TABLE in a read-only transaction".



Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?










share|improve this question


























    up vote
    1
    down vote

    favorite












    I have couple yesod apps deployed using keter with PostgreSQL. The thing I really like about them is the automatic DB migration that happens on deployment.



    But, now I have faced a small problem: I set up DB replica on another virtual machine; the second DB is slave and thus read-only. When I start keter with my apps deployed, the apps cannot start because they cannot successfully execute migration script. There are dummy changes only, no real change of table, but the app fails to start with
    "cannot execute ALTER TABLE in a read-only transaction".



    Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?










    share|improve this question
























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I have couple yesod apps deployed using keter with PostgreSQL. The thing I really like about them is the automatic DB migration that happens on deployment.



      But, now I have faced a small problem: I set up DB replica on another virtual machine; the second DB is slave and thus read-only. When I start keter with my apps deployed, the apps cannot start because they cannot successfully execute migration script. There are dummy changes only, no real change of table, but the app fails to start with
      "cannot execute ALTER TABLE in a read-only transaction".



      Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?










      share|improve this question













      I have couple yesod apps deployed using keter with PostgreSQL. The thing I really like about them is the automatic DB migration that happens on deployment.



      But, now I have faced a small problem: I set up DB replica on another virtual machine; the second DB is slave and thus read-only. When I start keter with my apps deployed, the apps cannot start because they cannot successfully execute migration script. There are dummy changes only, no real change of table, but the app fails to start with
      "cannot execute ALTER TABLE in a read-only transaction".



      Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?







      haskell yesod keter






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 12 at 8:03









      artem

      24219




      24219
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote



          accepted











          Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?




          Yes, it's possible. The simplest way to do is using environment variables in my opinion.
          If you are using yesod's scaffolding site, then you have to make the changes in the makeFoundation function which runs the migration. Note the the function named runMigration is used to perform it. You need to add a appropriate conditional to make it work.






          share|improve this answer





















          • Thanks, but I meant to do it without modifying the code of the app.
            – artem
            Nov 13 at 9:05










          • @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
            – Sibi
            Nov 13 at 15:52










          • Yep, so I take this as an answer "not possible"
            – artem
            Nov 14 at 10:41











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53257977%2fyesod-app-on-keter-with-read-only-access-to-db%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          0
          down vote



          accepted











          Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?




          Yes, it's possible. The simplest way to do is using environment variables in my opinion.
          If you are using yesod's scaffolding site, then you have to make the changes in the makeFoundation function which runs the migration. Note the the function named runMigration is used to perform it. You need to add a appropriate conditional to make it work.






          share|improve this answer





















          • Thanks, but I meant to do it without modifying the code of the app.
            – artem
            Nov 13 at 9:05










          • @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
            – Sibi
            Nov 13 at 15:52










          • Yep, so I take this as an answer "not possible"
            – artem
            Nov 14 at 10:41















          up vote
          0
          down vote



          accepted











          Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?




          Yes, it's possible. The simplest way to do is using environment variables in my opinion.
          If you are using yesod's scaffolding site, then you have to make the changes in the makeFoundation function which runs the migration. Note the the function named runMigration is used to perform it. You need to add a appropriate conditional to make it work.






          share|improve this answer





















          • Thanks, but I meant to do it without modifying the code of the app.
            – artem
            Nov 13 at 9:05










          • @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
            – Sibi
            Nov 13 at 15:52










          • Yep, so I take this as an answer "not possible"
            – artem
            Nov 14 at 10:41













          up vote
          0
          down vote



          accepted







          up vote
          0
          down vote



          accepted







          Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?




          Yes, it's possible. The simplest way to do is using environment variables in my opinion.
          If you are using yesod's scaffolding site, then you have to make the changes in the makeFoundation function which runs the migration. Note the the function named runMigration is used to perform it. You need to add a appropriate conditional to make it work.






          share|improve this answer













          Is it possible to temporarily disable migration scripts at startup via keter or app configs or ENV variables?




          Yes, it's possible. The simplest way to do is using environment variables in my opinion.
          If you are using yesod's scaffolding site, then you have to make the changes in the makeFoundation function which runs the migration. Note the the function named runMigration is used to perform it. You need to add a appropriate conditional to make it work.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 at 5:09









          Sibi

          29.8k965124




          29.8k965124












          • Thanks, but I meant to do it without modifying the code of the app.
            – artem
            Nov 13 at 9:05










          • @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
            – Sibi
            Nov 13 at 15:52










          • Yep, so I take this as an answer "not possible"
            – artem
            Nov 14 at 10:41


















          • Thanks, but I meant to do it without modifying the code of the app.
            – artem
            Nov 13 at 9:05










          • @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
            – Sibi
            Nov 13 at 15:52










          • Yep, so I take this as an answer "not possible"
            – artem
            Nov 14 at 10:41
















          Thanks, but I meant to do it without modifying the code of the app.
          – artem
          Nov 13 at 9:05




          Thanks, but I meant to do it without modifying the code of the app.
          – artem
          Nov 13 at 9:05












          @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
          – Sibi
          Nov 13 at 15:52




          @artem I don't see any way of doing it without modifying the code. One hypothetical thing I can image is to see if postgres provides any query for checking if it's in read only mode. You can then use that information in the runMigration function to not run any migration. But for that to work, you have to patch persistent library and modify some code!
          – Sibi
          Nov 13 at 15:52












          Yep, so I take this as an answer "not possible"
          – artem
          Nov 14 at 10:41




          Yep, so I take this as an answer "not possible"
          – artem
          Nov 14 at 10:41


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53257977%2fyesod-app-on-keter-with-read-only-access-to-db%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Guess what letter conforming each word

          Port of Spain

          Run scheduled task as local user group (not BUILTIN)